[프로그래머스] Level 0 옹알이

 

Level 0 중 가장 정답률이 낮길래 풀어봤다.

 

 

문제

태어난 지 6개월밖에 되지 않은 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 이어 붙인 발음밖에 하지 못 한다고 한다. 문자열 배열 babbling이 매개변수로 주어질 때, 조카가 발음할 수 있는 단어의 개수를 return하도록 메서드를 완성하라

 

 

 

 

 

나의 답안

class Solution {
    public int solution(String[] babbling) {
        int answer = 0;
        String[] canSay = {"aya", "ye", "woo", "ma"};
        String str;

        for (int i = 0; i < babbling.length; i++) {
            str = babbling[i];

            for (int j = 0; j < canSay.length; j++) {

                if (str.length() != 0 && str.contains(canSay[j])) {

                    if (str.equals(babbling[i])) {
                        str = babbling[i].replaceAll(canSay[j], "-");
                    } else {
                        str = str.replaceAll(canSay[j], "-");
                    }
                }
            }

            if (str.replaceAll("-", "").isEmpty()) {
                answer++;
            }
        }

        return answer;
    }
}

 

 

 

 

 

다른 유저의 답안

class Solution {
    public int solution(String[] babbling) {
        int answer = 0;

        for(int i =0; i < babbling.length; i++) {
            babbling[i] = babbling[i].replace("aya", "1");         
            babbling[i] = babbling[i].replace("woo", "1");
            babbling[i] = babbling[i].replace("ye", "1");
            babbling[i] = babbling[i].replace("ma", "1");      //해당하는 문자열이 있으면 1로 변환
                                                                                    //replace → replaceFirst 로 변경해야함!
            babbling[i] = babbling[i].replace("1", "");         //1을 제거
            if(babbling[i].isEmpty()) {      
                answer = answer + 1;
            }
        }

        return answer;
    }
}

 

  • 불필요하게 canSay배열 및 Babbling의 각 항목을 넣기 위한 문자열 변수(str)를 선언하지 않음 (성능, 가독성 ↑)
  • for문을 1번만 사용함
  • 단, "ayaaya"와 같은 중복이 발생해도 카운트가 된다. 따라서 replace() 대신 첫번째 해당문자만 변경해주는 replaceFirst()를 사용해야 한다!

 

복습

  • 배열의 길이 확인 :  arr.length      [괄호 사용 X]
  • 문자열의 일부를 다른 문자로 변환 :  String.replace("기존문자", "바꿀문자")
  • 문자열에 특정 문자가 포함되는지 확인 :  String.contains("문자")
  • 두 값이 같은지 확인 :  "문자".equals("문자")

[프로그래머스] Level 0 홀짝에 따라 다른 값 반환하기

 

머리가 잘 안돌아가서 복잡하게 풀었는데, 다른 분들의 풀이를 보니 훨씬 간단하게 풀었더군요 ..

 

 

문제

양의 정수 n이 매개변수로 주어지고, n이 홀수이면 n 이하의 홀수인 모든 양의 정수의 합을 반환하고, n이 짝수면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 반환하는 메서드를 작성하라.

 

 

 

 

 

나의 답안

class Solution {
    public int solution(int n) {        
        int oddSum = 0;
        int evenSum = 0;

        if (n % 2 == 1) {
            for (int i=1; i <= n; i++) {
                if (i % 2 != 0) {
                    oddSum += i;
                }
            }
            return oddSum;
        } else {
            for (int i=1; i <= n; i++) {
                if (i % 2 == 0) {
                    evenSum += i*i;
                }
            }
            return evenSum;
        }
    }
}

 

 

 

보완사항

  • sum 값을 불필요하게 oddSum, evenSum으로 나누어 선언할 필요 없이 하나의 변수 sum으로 선언
  • for문에서 i값을 2씩 증가시키기

 

class Solution {
    public int solution(int n) {
        int sum = 0;    // 변수 1개만 생성

        if (n % 2 == 1) {
            for (int i = 1; i <= n; i += 2) {    // i값 2씩 증가
                sum += i;
            }
        } else {
            for (int i = 2; i <= n; i += 2) { 
                sum += i * i; 
            }
        }
        return sum;
    }
}