[프로그래머스] 수 조작하기 2

 

 

 

문제

정수 배열 numLog가 주어집니다. 처음에 numLog[0]에서 부터 시작해 "w", "a", "s", "d"로 이루어진 문자열을 입력으로 받아 순서대로 다음과 같은 조작을 했다.

  • "w" : 수에 1을 더한다.
  • "s" : 수에 1을 뺀다.
  • "d" : 수에 10을 더한다.
  • "a" : 수에 10을 뺀다.

그리고 매번 조작을 할 때마다 결괏값을 기록한 정수 배열이 numLog 이다. 즉, numLog[i]는 numLog[0]로부터 총 i번의 조작을 가한 결과가 저장되어 있다.

주어진 정수 배열 numLog에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 메서드를 완성하라

 

 

 

 

나의 답안

 

  1. StringBulider 선언

  2. 발생할 수 있는 경우의 수가 4가지 (1, -1, 10, -10) 이므로 switch 문을 사용
  3. numLog[i]의 값은 numLog[i-1] 값을 w, a, s, d에 따라 조정한 숫자이므로,
    numLog[i] - numLog[i-1] 값을 통해 w, a, s, d 여부를 판단하여
    sb에 순서대로 저장했다.

 

 

class Solution {
    public String solution(int[] numLog) {
        StringBuilder sb = new StringBuilder();
        
        for (int i=1; i<numLog.length; i++) {
            switch (numLog[i] - numLog[i-1]) {
                case 1: sb.append("w");
                    break;
                case -1: sb.append("s");
                    break;
                case 10: sb.append("d");
                    break;
                case -10: sb.append("a");
                    break;
                default: break;
            }
        }
            
            return sb.toString();
    }
}

 

 

 

 

모범 답안

class Solution {
    public String solution(int[] numLog) {
        String answer = "";
        for(int i=1; i<numLog.length; i++){
            int j = numLog[i-1] - numLog[i];
            switch(j){
                case -1 : answer+='w'; break;
                case 1 : answer+='s'; break;
                case -10 : answer+='d'; break;
                case 10 : answer+='a'; break;
            }
        }
        return answer;
    }
}

 

  • StringBuilder 대신 String을 선언하여 문자를 추가했다.
  • String을 통해 값을 추가할 경우, 추가할 때마다 프로그램 내부적으로 매번 변수 선언을 반복하여
    비효율적일 수 있어 StringBuilder 사용함.  (책에서 봤음)
  • switch문 마지막에 default는 생략해도 무방하다는 것을 깨달았다.

 

복습

       switch문 구조

  • switch (입력 변수) {
        case 입력값 1: 수행할 문장 1;
            break;
        case 입력값 2: 수행할 문장 2;
            break;


        ....


        default: 수행할 문장 n;
            break;
    }

  • 입력 변수의 값이 각 case의 입력값과 같을 경우 해당 case의 수행할 문장을 수행한다.