2023/04/03-프로그래머스(JAVA)

이동규·2023년 4월 3일

1. 문자열 밀기

subString(문자열 자르기) 사용

String substring(int index)

  • 문자열의 index 자리부터 끝까지 불러올 때 사용

String substring(int beginIndex, int endIndex)

  • 문자열의 beginIndex 부터 endIndex까지 불러올 때 사용

문제

문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.

  • 문자열 길이 만큼 문자열을 오른쪽으로 밀기
  • 맨 뒤의 문자열을 맨 앞으로(즉, 첫 값부터 맨 뒤 문자열 전 까지 subString을 이용하여 값을 이어 붙이면서 비교)
  • 반복문을 다 돌 때까지 찾지 못하면 return -1;
public int solution(String A, String B) {
        int answer = 0;
        
        String tA = A;
        for(int i = 0; i < A.length(); i++){
            if(tA.equals(B)) return answer;
            String a = tA.substring(tA.length() - 1);
            tA = a + tA.substring(0, tA.length() - 1);
            answer++;
        }
        return -1;
    }

2. 잘라서 배열로 저장하기

문제

문자열 my_str과 n이 매개변수로 주어질 때, my_str을 길이 n씩 잘라서 저장한 배열을 return하도록 solution 함수를 완성해주세요.

  • 문자열을 넣을 배열 크기를 지정하기 위해 문자열 속 문자 개수를 n과 나누었을 떄 딱 떨어지는지 확인, 안 떨어질 경우 문자열 길이 / n + 1
  • 배열 속에 나눠진 문자를 넣기 위해 문자열 0 ~ n - 1, n ~ 2n - 1, 만약 n개 씩 나누었을 때 딱 떨어지지 않는다면 마지막 문자열 위치와 (i + 1) * n 과의 값 비교 후 작은 값까지 substring
public String[] solution(String my_str, int n) {
        String[] answer = new String[my_str.length()%n == 0 ? my_str.length()/n : my_str.length()/ n + 1];
        for(int i = 0; i < answer.length; i++){
            answer[i] = my_str.substring(i*n, Math.min((i + 1) * n, my_str.length()));
        }

        return answer;
    }

3. 옹알이(1)

replace(문자열 치환) 사용

a = a.replace([기존 문자], [바꿀 문자]);

  • 자신이 바꾸고 싶은 문자로 문자열을 치환해주는 기능

a = a.replaceAll([정규식], [바꿀 문자]);

  • 자신이 바꾸고 싶은 문자로 문자열을 전부 치환해주는 기능
  • 특수문자로 치환은 어려움

a = a.replaceFirst([기존 문자], [바꿀 문자]);

  • 자신이 바꾸고 싶은 문자열이 처음으로 해당할 때만 치환해주는 기

문제

머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

  • 문자열이 들어간 배열 안과 발음이 가능한 것과 비교해서 존재하면 0으로 치환
  • 0으로 치환된 것을 다시 null로 치환
  • null 값의 개수 만큼 answer++;
public int solution(String[] babbling) {
        int answer = 0;
        for(int i = 0; i < babbling.length; i++){
            babbling[i] = babbling[i].replaceFirst("aya", "0");
            babbling[i] = babbling[i].replaceFirst("ye", "0");
            babbling[i] = babbling[i].replaceFirst("woo", "0");
            babbling[i] = babbling[i].replaceFirst("ma", "0");
            babbling[i] = babbling[i].replace("0", "");
            
            if (babbling[i].equals("")) answer++;
        }
        return answer;
    }
profile
진짜 개발자가 되고 싶다

0개의 댓글