코딩테스트/프로그래머스

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

플래시🦥 2023. 8. 11.
반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명
정수 배열 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 ≤ log의 길이 ≤ 100,000
-100,000 ≤ log[0] ≤ 100,000
1 ≤ i ≤ log의 길이인 모든 i에 대해 |log [i] - log [i - 1]|의 값은 1 또는 10입니다.

 


 

wasd를 값으로, 그에 해당하는 수의 변화를 키로 사용해서 첫번째 결괏값인 numLog의 1번 인덱스의 값부터 이전의 값과 비교하여 어떤 계산이 되었는지 찾는 방식으로 문제를 해결했다. 

map에서 현재결과값과 이전결괏값의 차를 키로 사용해서 나온 값을 append 하였다. 

전체코드

import java.util.*;
class Solution {
    public String solution(int[] numLog) {
        StringBuilder sb = new StringBuilder();
        
        Map<Integer,Character> map = Map.of(
            1,'w',
            -1,'s',
            10,'d',
            -10,'a'
        );
        
        for(int i =1; i<numLog.length;i++){
            sb.append(map.get(numLog[i]-numLog[i-1]));
        }
        
        return sb.toString();
    }
}
728x90
반응형

댓글