[프로그래머스] Lv.0 수 조작하기 2.java

김엄지·2024년 3월 27일

알고리즘

목록 보기
27/90

🐤 목표

앞으로 매일 꾸준히 코딩테스트를 진행하면서 단계를 높여가보자.

문제 설명

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

"w" : 수에 1을 더한다.
"s" : 수에 1을 뺀다.
"d" : 수에 10을 더한다.
"a" : 수에 10을 뺀다.
그리고 매번 조작을 할 때마다 결괏값을 기록한 정수 배열이 numLog입니다. 즉, numLog[i]는 numLog[0]로부터 총 i번의 조작을 가한 결과가 저장되어 있습니다.

주어진 정수 배열 numLog에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 함수를 완성해 주세요.

제한사항

2 ≤ numLog의 길이 ≤ 100,000
-100,000 ≤ numLog[0] ≤ 100,000
1 ≤ i ≤ numLog의 길이인 모든 i에 대해 |numLog[i] - numLog[i - 1]|의 값은 1 또는 10입니다.

문제 풀이

class Solution {
    public String solution(int[] numLog) {
        StringBuilder answer = new StringBuilder();
        
        for (int i=1; i<numLog.length; i++){
            int diff = numLog[i] - numLog[i-1];
            if (diff == 1) {
                answer.append('w');
            } else if (diff == -1) {
                answer.append('s');
            } else if (diff == 10) {
                answer.append('d');
            } else if (diff == -10) {
                answer.append('a');
            }
        }
        return answer.toString();
    }
}

1) StringBuilder answer = new StringBuilder();

  • 문자열 처리를 위한 StringBuilser 객체를 생성
  • 문자열을 여러 번 변경해야 할 때, StringBuilder를 사용하며 성능이 향상된다.

2) 반복문을 이용하여 numLog 배열을 순회

  • int i=1 시작 인덱스를 1로 설정한 이유는 첫 번째 값을 기준으로 두 번째 값부터 차이를 계산하기 때문이다.

3) int diff = numLog[i] - numLog[i-1]

  • 현재 인덱스와 이전 인덱스 값의 차이를 계산한다.

4) 각 조건문 수행

  • StringBuilder 클래스의 메서드 중에 append()를 사용하여 문자열을 뒤에 추가한다.

5) return answer.toString();

  • StringBuilder에 저장된 문자열을 반환한다.

❗알게 된 지식

StringBuilder 클래스

StringBuilder 클래스는 문자열을 처리하기 위한 가변적인 문자열 버퍼를 제공

String 클래스와 유사하지만,

  • String은 불변(immutable)하고 StringBuilder는 가변(mutable)하다는 차이가 있다.
  • StringBuilder는 문자열을 변경하거나 조작할 때, 메모리를 절약하고 성능을 향상시킬 수 있다.

StringBuilder 클래스의 메서드 중 주로 사용되는 것

  • append(): 문자열을 뒤에 추가합니다.
  • insert(): 지정된 위치에 문자열을 삽입합니다.
  • delete(): 지정된 범위의 문자열을 삭제합니다.
  • replace(): 지정된 범위의 문자열을 다른 문자열로 대체합니다.
  • substring(): 지정된 범위의 부분 문자열을 반환합니다.
  • length(): 현재 문자열의 길이를 반환합니다.
  • toString(): StringBuilder 객체를 String으로 변환하여 반환합니다.

다른 사람 풀이 1

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;
    }
}
  • numLog[i-1] - numLog[i] 를 변수에 저장하여, switch문 사용

다른 사람 풀이 2

class Solution {
    public String solution(int[] numLog) {
        String answer = "";
        for(int i=1; i<numLog.length; i++) {
            if(numLog[i] - numLog[i-1] == 1) {
            answer += 'w';
            } else if(numLog[i] - numLog[i-1] == -1) {
            answer += 's';
            } else if(numLog[i] - numLog[i-1] == 10) {
            answer += 'd';
            } else {
            answer += 'a';
            }
        }
        return answer;
    }
}
profile
나만의 무언가를 가진 프로그래머가 되자

0개의 댓글