[Java] 수 조작하기 1, 2

peace w·2023년 10월 4일
0

프로그래머스

목록 보기
19/25
post-thumbnail

수 조작하기 1

문제

  • 정수 n과 문자열 control이 주어집니다. control은 "w", "a", "s", "d"의 4개의 문자로 이루어져 있으며, control의 앞에서부터 순서대로 문자에 따라 n의 값을 바꿉니다.

"w" : n이 1 커집니다.
"s" : n이 1 작아집니다.
"d" : n이 10 커집니다.
"a" : n이 10 작아집니다.

  • 위 규칙에 따라 n을 바꿨을 때 가장 마지막에 나오는 n의 값을 return 하는 solution 함수를 완성해 주세요.

  • 제한사항

    • -100,000 ≤ n ≤ 100,000
    • 1 ≤ control의 길이 ≤ 100,000
    • control은 알파벳 소문자 "w", "a", "s", "d"로 이루어진 문자열입니다.

입출력 예

문제 풀이

  • controlcharAt()를 사용하여 문자 하나씩 나눴다.
  • if 문을 사용해서 n값을 바꿨다.
class Solution {
    public int solution(int n, String control) {
        int answer = 0;
        
        for(int i = 0; i < control.length(); i++) {
            char a = control.charAt(i);
            if (a == 'w') {
                n += 1;
            } else if (a == 's') {
                n -= 1;
            } else if (a == 'd') {
                n += 10;
            } else if (a == 'a') {
                n -= 10;
            }
        }
        
        return n;
    }
}

맨 처음에 위 처럼 작성했는데 다른 사람들의 코드를 참고하여 이렇게 작성하는 것 보다 switch~case 를 사용하는것이 코드 길이나 가독성 면에서도 좋다는 것을 깨달았다.

switch~case 를 사용하면 아래와 같다.

class Solution {
    public int solution(int n, String control) {
        int answer = 0;
        
        for(int i = 0; i < control.length(); i++) {
            char a = control.charAt(i);
            switch (a) {
                case 'w' : n += 1; break;
                case 's' : n -= 1; break;
                case 'd' : n += 10; break;
                case 'a' : n -= 10; break;
            }
        }
        
        return n;
    }
}

수 조작하기 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 함수를 완성해 주세요.

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

입출력 예

문제 풀이

골자는 수 조작하기 1과 똑같다. 다만 이걸 거슬러 올라가서 result를 리턴해야된다.

두 수의 차이가 +1이면 : "w"
두 수의 차이가 -1이면 : "s"
두 수의 차이가 +10이면 : "d"
두 수의 차이가 -10이면 : "a"

이렇게 거꾸로 하면 된다.

  • 두 수를 numLog[i], numLog[i-1] 이라고 한다면 for 문은 i부터 시작해야한다 (인덱스는 0부터 시작)
class Solution {
    public String solution(int[] numLog) {
        String answer = "";
        for (int i = 1; i < numLog.length; i++) {
            int j = numLog[i] - numLog[i-1];  // 두 수의 차이
            switch(j) {
                case 1 : answer+='w'; break;
                case -1 : answer+='s'; break;
                case 10 : answer+='d'; break;
                case -10 : answer+='a'; break;
            }
        }
        
        return answer;
    }
}
profile
더 성장하자.

0개의 댓글