Post

[Programmers] #181925 - 수 조작하기 2 [Java][C++][Python]

수열의 인접한 값 차이로부터 w/a/s/d 조작 문자열을 복원하는 워밍업 문제.

[Programmers] #181925 - 수 조작하기 2 [Java][C++][Python]

문제 링크


1. 아이디어

numLog에서 인접한 두 값의 차이를 확인해서 어떤 조작이 있었는지 역으로 알아내는 문제다. 이전 값과 현재 값의 차이가 +1이면 w, -1이면 s, +10이면 d, 그 외의 경우(즉 -10)는 a로 판단해서 순서대로 이어 붙이면 조작 문자열이 복원된다.


2. 복잡도

접근시간공간
풀이$O(N)$$O(N)$

($N$ = numLog의 길이)


3. 코드

풀이 [Java][C++][Python]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
    public String solution(int[] numLog) {
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i < numLog.length; i++) {
            int prv = numLog[i - 1];
            int cur = numLog[i];

            if (prv + 1 == cur) {
                sb.append("w");
            } else if (prv - 1 == cur) {
                sb.append("s");
            } else if (prv + 10 == cur) {
                sb.append("d");
            } else {
                sb.append("a");
            }
        }

        return sb.toString();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <bits/stdc++.h>
using namespace std;

string solution(vector<int> numLog) {
    string s;
    for (int i = 1; i < numLog.size(); i++) {
        int prv = numLog[i - 1];
        int cur = numLog[i];

        if (prv + 1 == cur) {
            s += 'w';
        } else if (prv - 1 == cur) {
            s += 's';
        } else if (prv + 10 == cur) {
            s += 'd';
        } else {
            s += 'a';
        }
    }

    return s;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
def solution(numLog):
    ans = []
    for prv, cur in zip(numLog, numLog[1:]):
        if prv + 1 == cur:
            ans.append("w")
        elif prv - 1 == cur:
            ans.append("s")
        elif prv + 10 == cur:
            ans.append("d")
        else:
            ans.append("a")

    return "".join(ans)

Python은 numLognumLog[1:]zip으로 묶어 인접한 두 값을 (prv, cur) 쌍으로 바로 순회했다. 인덱스를 직접 다루지 않고도 이전 값과 현재 값을 나란히 꺼낼 수 있어, 인덱스 기반으로 순회하는 Java/C++보다 간결하다.


This post is licensed under CC BY 4.0 by the author.