Post

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

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

문제 링크


1. 아이디어

인접한 두 로그값의 차이는 항상 +1, -1, +10, -10 중 하나다. 그 차이를 보고 각각 w, s, d, a로 되돌려 조작 기록 문자열을 복원해줬다.


2. 복잡도

시간복잡도공간복잡도
$O(N)$$O(1)$

$N$ = numLog 길이


3. 코드

풀이 [Java][C++]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
    public String solution(int[] numLog) {
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i < numLog.length; i++) {
            if (numLog[i] == numLog[i - 1] + 1) {
                sb.append("w");
            } else if (numLog[i] == numLog[i - 1] - 1) {
                sb.append("s");
            } else if (numLog[i] == numLog[i - 1] + 10) {
                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
#include <string>
#include <vector>

using namespace std;

string solution(vector<int> numLog) {
    string ans;
    for (int i = 1; i < numLog.size(); i++) {
        if (numLog[i] == numLog[i - 1] + 1) {
            ans += "w";
        } else if (numLog[i] == numLog[i - 1] - 1) {
            ans += "s";
        } else if (numLog[i] == numLog[i - 1] + 10) {
            ans += "d";
        } else {
            ans += "a";
        }
    }

    return ans;
}

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