[개발] 코딩문제 정리

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

  • -
반응형



수 조작하기 1

https://school.programmers.co.kr/learn/courses/30/lessons/181926






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



switch ( ) {
    case value :(콜론) 
              조건;
             break;

    case value :(콜론) 
              조건;
             break;

    default :(콜론) 
              조건;
             break;
}









class Solution {
    public int solution(int n, String control) {
        return control.chars().reduce(n, (acc, c) -> acc + (c == 'w' ? 1 : c == 's' ? -1 : c == 'd' ? 10 : -10));
    }
}


이 코드는 Java 스트림 API를 사용하여 control 문자열의 각 문자를 순회하면서 n 값에 특정 값을 누적하여 최종 결과를 반환하는 방식입니다. 이 코드는 간결하고 함수형 프로그래밍 스타일을 채택하고 있습니다. 각 문자가 'w', 's', 'd', 'a'일 때 각각 다른 값을 더하거나 빼는 작업을 수행합니다.

control.chars():
control 문자열의 각 문자를 IntStream으로 변환합니다. 이 스트림은 control 문자열의 각 문자의 유니코드 값을 포함합니다.
reduce(n, ...):

reduce 메서드는 누적 연산을 수행하여 스트림의 요소를 하나의 값으로 결합합니다. 첫 번째 인수는 초기값으로, 여기서는 n입니다.
두 번째 인수는 누적 함수를 정의하는 람다 표현식입니다. 이 람다 표현식은 두 개의 인수를 받습니다: acc (현재 누적 값)와 c (현재 스트림의 요소).
람다 표현식 (acc, c) -> acc + ...:

람다 표현식에서 c는 현재 스트림의 요소를 나타내며, control 문자열의 각 문자의 유니코드 값을 가집니다.
삼항 연산자를 사용하여 현재 문자가 'w', 's', 'd', 'a'인지 확인합니다:
c == 'w'인 경우 1을 더합니다.
c == 's'인 경우 -1을 뺍니다.
c == 'd'인 경우 10을 더합니다.
그 외의 경우 (즉, 'a') -10을 뺍니다.
이 결과를 acc에 더합니다.
이렇게 계산된 값을 반환하여 다음 요소와 함께 다시 누적합니다.










class Solution {
    public int solution(int n, String control) {
        for(char c : control.toCharArray()){
            n += c == 'w' ? 1 : c == 's' ? -1 : c == 'd' ? 10 : -10;
        }
        return n;
    }
}


문자열.toCharArray() : char[]








class Solution {
    public int solution(int n, String control) {
        int answer = n;

        // 문자에 대한 동작 값을 인덱스로 매핑하는 배열
        // 배열의 인덱스는 ASCII 코드에 따라 문자에 대응됩니다.
        // a: -10, d: 10, s: -1, w: 1 이므로, 각 문자의 ASCII 값을 기준으로 오프셋을 두고 배열 크기를 설정합니다.
        int[] controlMap = new int[128];
        controlMap['w'] = 1;
        controlMap['s'] = -1;
        controlMap['d'] = 10;
        controlMap['a'] = -10;

        // control 문자열을 순회하면서 answer 값을 업데이트
        for (int i = 0; i < control.length(); i++) {
            char c = control.charAt(i);
            answer += controlMap[c];
        }

        return answer;
    }
}

 

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.