알고리즘 주요 표현식 정리

표현식


// 정렬
Arrays.sort(ints1); // 기본이 오름차순

// reverse()[Palindrome]를 위해서는 StringBuilder(str) 사용
String tmp = new StringBuilder(str).reverse().toString();

// 대소문자 구분없이 equalsIgnoreCase(받는 str)
str.equalsIgnoreCase(tmp);

// 문자배열을 char 로 받을 때 for문
for(char x : str.toCharArray()){...}

// char 입력시 표현
char c = input.next().charAt(0);

// int [] 배열 정의  index 표현을 할 때는 List 대신해
int[] answer = new int[s.length()];

// 대알파벳 -> "" 공백으로 처리
str = str.toUpperCase().replaceAll("[^A-Z]", "");  

기본 알고리즘

  • swap 알고리즘
    char tmp = ch[lt];      // swap 알고리즘 적용
    ch[lt] = ch[rt];
    ch[rt] = tmp;
  • 최대값 알고리즘
for (String tmp : ss) {
   int len = tmp.length();

   if (max < len) {    // 최대값 구하는 알고리즘 적용, max <= len (x)
    max = len;
    answer = tmp;
    }
}
  • 문자열 뒤집기
 while (lt < rt) {   // 뒤집기 단골 변수 : lt, rt => while(lt<rt)
            // 알파벳 아닌 것들은 그냥 넘어가
	  if(!Character.isAlphabetic(ch[lt])) lt++;
      else if(!Character.isAlphabetic(ch[rt])) rt--;
      else {  // 알파벳일 때
         char tmp = ch[lt];      // swap 알고리즘 적용
         ch[lt] = ch[rt];
         ch[rt] = tmp;
         lt++;
         rt--;
    }
  }
  • 중복문자
    public String solution(String str) {
        String answer = "";

/*        for (int i = 0; i < str.length(); i++) {
            if(str.indexOf(str.charAt(i)) == i ) answer += str.charAt(i);
        }*/

        for (char x : str.toCharArray()) {
            if (!answer.contains(String.valueOf(x))) {
                answer += String.valueOf(x);
            }
        }

        return answer;
    }
  • 아나그램
    public String solution(String s1, String s2) {
        String answer = "YES";
        HashMap<Character, Integer> map = new HashMap<>();
        for (char x : s1.toCharArray()) {
            map.put(x, map.getOrDefault(x, 0) + 1); // map의 value에 count값으로 1부터 계속 넣기
        }
        for (char x : s2.toCharArray()) {
            // map의 value에서 같지 않은 게 나오면 return "No"
            if(map.containsKey(x) || map.get(x)==0) return "NO";
            // 아니면 return "YES"
            map.put(x, map.get(x) - 1);
        }
            return answer;
    }
  • sliding window(짧은 문자거리)
    public int[] solution(String s, char t) {
        // index 표현을 위해 int[]로 썼던 것
        int[] answer = new int[s.length()];

        int p = 1000;

        // 왼쪽부터 시작하는 loop
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == t) {
                p = 0;
                answer[i] = p;
            }
            else {
                p++;
                answer[i] = p;
            }
        }

        // 오른쪽부터 시작하는 loop
        for (int i = s.length()-1; i >=0 ; i--) {
            if(s.charAt(i)==t) p=0;     // 이미 왼쪽 loop할 때 넣었으니 0처리
            else{
                p++;
                answer[i] = Math.min(answer[i], p); // 기존의 배열값들 중 비교해서 작은 걸로 다시 넣는다.
            }
        }
        return answer;
    }
  • 문자열 압축
    private String solution(String str) {

        String answer = "";

        int count = 1;

        for (int i = 0; i < str.length()-1; i++) {
//            char[] chars = str.toCharArray();
            if (str.charAt(i) == str.charAt(i + 1)) {  // 이것때문에  i < str.length()-1; 해주는 것!
                count++;
                // answer +=
            } else {
                answer += str.charAt(i);
                if (count > 1) answer += String.valueOf(count);
                count = 1;// count 초기화
            }
        }

        return answer;
    }

좋은 웹페이지 즐겨찾기