
(버그가 있는지 사진이 2개로 올라가져 있네요. 고쳐도 수정이 안되네요...)
function solution(numLog) {
let answer = "";
for (let i = 1; i < numLog.length; i++) {
if (numLog[i] - numLog[i - 1] === 1) {
answer = answer + "w";
} else if (numLog[i] - numLog[i - 1] === -1) {
answer = answer + "s";
} else if (numLog[i] - numLog[i - 1] === 10) {
answer = answer + "d";
} else if (numLog[i] - numLog[i - 1] === -10) {
answer = answer + "a";
}
}
return answer;
}
사실 이 문제는 이 numLog[i] - numLog[i - 1] 조건문을 완전히 파악 못했습니다.
문제 본문에 numLog[i] - numLog[i - 1] 이 적혀 있어서 이 조건이구나 생각하고 진행했습니다.
이부분은 chatGPT에 물어봐서 어느정도 파악했는데 마이너스 - 마이너스에서도 갑자기 안하던 산수를 하다가 막혀서 물어보고 파악해온 내용을 설명하겠습니다.
여기 일일이 적으면서 조금씩 이해되는 것 같습니다.
function solution() {
const convert = {
"1": "w",
"-1": "s",
"10": "d",
"-10": "a",
}
return numLog.slice(1).map( (v, i) => {
return convert[v - numLog[i]];
}).join();
}
키: "1" 값 "w"
키: "-1" 값 "s"
키: "10" 값 "d"
키: "-10" 값 "a"
을 대입합니다.
v - numLog[i] 를 하면
[0, 1, 0, 10, 0, 1, 0, 10, 0, -1, -2, -1]
이 배열의 아주 맨 처음인 1(인덱스 1번째) - 0(인덱스 0번째)부터 시작합니다.
1 - 0 = 1
0 - 1 = -1
10 - 0 = 10
0 - 10 = -10
1 - 0 = 1
0 - 1 = -1
10 - 0 = 10
0 - 10 = -10
-1 - 0 = -1
-2 - (-1) = -2 + 1 = -1
-1 - (-2) = -1 + 2 = 1
을 계산합니다. convert에 담긴 1의 결과는 "w", -1에는 "s" 10에는 "d" -10에는 "a"
을 반환홥니다.
그러면 convert[v - numLog[i]] 는 배열 속에 결과 값인 ["w", "s", "d", "a", "w", "s", "d", "a", "s", "s", "w"] 가 나오고
저는 일단 빅오 표기법 및 시간 복잡도, 공간 복잡도, 코드 최적화에 대해
깊은 이해가 없습니다. 그래서 chatGPT의 도움을 받아 작성하겠습니다.
요약의 내용은
시간 복잡도는 O(n)이며 numLog 배열의 길이만큼 반복하는 상태입니다.
공간 복잡도는 O(n)이며 결과 문자열이 반복 횟수만큼 길어져서 O(n) 입니다.
이 코드가 실행되는데 얼마나 시간이 걸리는 가? 를 계산하는 방법으로
입력값이 클수록 얼마나 느려지는지를 확인
for (let i = 1; i < numLog.length; i++) {
// 반복 내부 코드들
}
이 코드가 실행될 때 얼만큼 메모리를 사용하는가? 를 계산합니다.
let answer = ""; // 이 새로운 문자열을 하나 생성하면
즉, 이 변수는 n에 비례해서 커짐 (반복 횟수와 동일)
그래서 공간 복잡도도 O(n)인데 이는 n이 numLog의 길이를 나타냅니다.
예시를 들자면
let numLog = [0, 1, 0, 10] // 일 때
for는 3번 반복합니다.
answer는 문자열이 3번 생깁니다.