CODING TEST/programmers

Day6 - 수 조작하기 1

iamyuunzo 2025. 7. 14. 10:32

📌 문제 정보

- 문제 이름 : 코딩 기초 테스트 - 수 조작하기 1

- 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/181926

 

 

📌 문제 요약

핵심 조건: control은 "w", "a", "s", "d"의 4개의 문자로 이루어져 있으며, control의 앞에서부터 순서대로 문자에 따라 n의 값 바꿈.

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

위 규칙에 따라 n을 바꿨을 때 가장 마지막에 나오는 n의 값을 return 

- 제한: -100,000 ≤ n ≤ 100,000  /  1 ≤ control의 길이 ≤ 100,000

 

 

📌 내 풀이 및 코드

class Solution {
    public int solution(int n, String control) {        
        for (int i=0; i<control.length(); i++) {
            if (control.charAt(i) == 'w') {
                n += 1;
            } else if (control.charAt(i) == 's') {
                n -= 1;
            } else if (control.charAt(i) == 'd') {
                n += 10;
            } else {
                n -= 10;
            }
        }
        return n;
    }
}

- return에다가 식을 적어보려고 했는데 그러면 값이 누적이 안되기 때문에 틀렸음.

- 근데 한 가지 단점 : 불필요한 else에서 'a' 아닌 다른 값도 걸릴 수 있기 때문에 조심해야 함.

 

 

📌 다른 사람들 풀이

// 1
for(char ch : control.toCharArray()) {
    switch(ch) {
        case 'w': answer += 1; break;
        case 's': answer -= 1; break;
        case 'd': answer += 10; break;
        case 'a': answer -= 10; break;
        default:break;
    }
}


// 2
for(char c : control.toCharArray()){
    n += c == 'w' ? 1 : c == 's' ? -1 : c == 'd' ? 10 : -10;
}
return n;

<-- 다른 풀이 요약 -->

- 1 : for-each, switch문 : control.toCharArray()로 문자 하나씩 받음. 혹시 모를 예외 문자도 커버 가능함.

- 2 : for-each, 삼항연산자 : 깔끔하게 문자 하나씩 순회하고 최단 코드. but 내 코드처럼 'a'외 다른 문자도 -10 적용되므로 조심



📌 짧은 회고 및 문법

- for-each문과 삼항연산자를 잘 활용하지 못하는 것 같다. 코드를 간결하고 가독성 좋게 보이게 하려면 스킬이 살짝 필요한 느낌인데.. 그래도 삼항연산자는 되면 써보려고 하는데 이번 문제처럼 중첩 삼항 연산자는 처음 봄. 근데 중첩 삼항 연산자는 가독성 때문에 너무 복잡해져서 쓰지 않는 걸 추천한다고 함. 가독성이 좋고 효율적인 코드를 만드는 그 날까지.. :(

// 중첩 삼항 연산자 한 줄
n += c == 'w' ? 1 : c == 's' ? -1 : c == 'd' ? 10 : -10;


// 계단식으로 표현
n += (
    c == 'w' ? 1 :        // c가 'w'면 1,
    (c == 's' ? -1 :      // 아니면 c가 's'면 -1,
    (c == 'd' ? 10 : -10) // 아니면 c가 'd'면 10, 그 외엔 -10
));