문제1
정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을
마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.
입출력 예
num_list result
[2, 1, 6] [2, 1, 6, 5]
[5, 2, 1, 7, 5] [5, 2, 1, 7, 5, 10]
문제2
정수 n과 문자열 control이 주어집니다. control은 "w", "a", "s", "d"의 4개의 문자로 이루어져 있으며, control의 앞에서부터 순서대로 문자에 따라 n의 값을 바꿉니다.
"w" : n이 1 커집니다.
"s" : n이 1 작아집니다.
"d" : n이 10 커집니다.
"a" : n이 10 작아집니다.
위 규칙에 따라 n을 바꿨을 때 가장 마지막에 나오는 n의 값을 return 하는 solution 함수를 완성해 주세요.
입출력 예
n control result
0 "wsdawsdassw" -1
문제3
정수 배열 numLog가 주어집니다.
처음에 numLog[0]에서 부터 시작해 "w", "a", "s", "d"로 이루어진 문자열을 입력으로 받아 순서대로 다음과 같은 조작을 했다고 합시다.
"w" : 수에 1을 더한다.
"s" : 수에 1을 뺀다.
"d" : 수에 10을 더한다.
"a" : 수에 10을 뺀다.
그리고 매번 조작을 할 때마다 결괏값을 기록한 정수 배열이 numLog입니다.
즉, numLog[i]는 numLog[0]로부터 총 i번의 조작을 가한 결과가 저장되어 있습니다.
주어진 정수 배열 numLog에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 함수를 완성해 주세요.
문제4
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다.
각 query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
입출력 예
arr queries result
[0, 1, 2, 3, 4] [[0, 3],[1, 2],[1, 4]] [3, 4, 1, 0, 2]
문제5
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.
각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.
단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.
입출력 예
arr queries result
[0, 1, 2, 4, 3] [[0, 4, 2],[0, 3, 2],[0, 2, 2]] [3, 4, -1]
🕹️ 문제를 풀기위해 알면 좋을 것
내 답안지
문제 1
function solution(num_list) {
const last = num_list[num_list.length -1]
const lastSecond = num_list[num_list.length - 2]
const result = [...num_list]
if(last > lastSecond){
const temp = last - lastSecond
result.push(temp)
}else{
const temp = last * 2
result.push(temp)
}
return result
}
문제2
function solution(n, control) {
const conArr = control.split('')
let result = n
for(let i =0; i < conArr.length; i++){
switch (conArr[i]){
case "w":
result += 1
break;
case "s":
result -= 1
break;
case "d":
result += 10
break;
case "a":
result -= 10
break;
}
}
return result
}
나는 이 문제를 봤을때 일단 문자열 control을 한글자씩 나눈 배열로 변환한 다음 switch - case문을 써야 겠다고 생각했다.
그런데 문자열 자체로도 length와 인덱스가 있어서 굳이 배열로 안나눠도 됐을 것 같다ㅠ.....
문제 3
function solution(numLog) {
const result = []
for(let i=1; i<numLog.length; i++){
switch (numLog[i] - numLog[i-1]){
case 1:
result.push("w")
break;
case -1 :
result.push("s")
break;
case 10 :
result.push("d")
break;
case -10 :
result.push("a")
}
}
return result.join('')
}
+) 일단 생각나는게 push 였어서 배열로 만들었다가 join('') 을 사용해 문자열로 만들어줬었는데, concat()을 썼어도 괜찮았을 것 같다
문제 4
function solution(arr, queries) {
let temp1 = 0
let temp2 = 0
for(let i=0; i < queries.length; i++){
const query = queries[i]
temp1 = query[0]
temp2 = query[1]
let temp = arr[temp1]
arr[temp1] = arr[temp2]
arr[temp2] = temp
}
return arr
}
이 문제는 뭔말인지 좀 생각했다
문제 5
function solution(arr, queries) {
const result = []
for(let i=0; i<queries.length; i++){
const query = queries[i]
const [s, e, k] = query
const tempArr = arr.slice(s, e+1)
const nums = []
tempArr.forEach((item)=> {
if(item > k){
nums.push(item)
}
});
if(nums.length > 0){
result.push(Math.min(...nums))
}else{
result.push(-1)
}
}
return result
}
이 문제는 고민을 좀 했다 일단 문제를 잘못 해석해서 풀이를 잘못하기도 했고ㅋㅋㅋ 구조분해 할당을 잘못쓰기도 했다ㅋㅋ
첫번째로 문제를 잘못 이해했는데
s <= i <= e 인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]
이 부분보고 k보다 크면서 가장 작은 정수면(모든 요소가 정수라고 문제에서 지정해줌) (k+1) 이라고 생각해버린 것...
그리고 arr[i] 로 인덱스 를 지칭한 것으로 해석해야 했는데 그냥 범위내의 정수로 생각해버렸다...
그래서 일차 답안이 이렇다
function solution(arr, queries) {
const result = []
for(let i=0; i<queries.length; i++){
const query = queries[i]
const {s, e, k} = query
if(s <= k+1 && k+1 <= e && k+1 == arr[i]){
result.push(k+1)
}else{
result.push(-1)
}
}
return result
}
근데 테스트 케이스 시행 결과가
[-1,-1,-1] 이었다ㅋㅋㅋㅋ
알고보니 구조분해 할당을 잘못했던 것....
const query // query는 [{0, 4, 2}] 이런 게 아니라 [[0, 4, 2]] 이런 배열
const {s, e, k} = query // 객체를 구조분해할떄
// 배열을 구조분해 할당중이기 떄문에
const [s, e, k] = query; // 이렇게 써야 맞다
그리고 범위 안의 정수가 아니라
e <= arr[i] <= s
이렇게 범위를 좁힌다음! k보다 크지만 가장 작은 arr[i] 값 이어야 한다는 것
그래서 e번째 인덱스부터 s번째 인덱스까지 추출한 다음
그 배열에서 가장 작은 값을 출력하도록했다.
추출한 배열이 없으면 -1 을 리턴하도록 해서 예외처리까지 해주었다.
최종 5번문제 답지
function solution(arr, queries) {
const result = []
for(let i=0; i<queries.length; i++){
const query = queries[i]
const [s, e, k] = query
const tempArr = arr.slice(s, e+1)
const nums = []
tempArr.forEach((item)=> {
if(item > k){
nums.push(item)
}
});
if(nums.length > 0){
result.push(Math.min(...nums))
}else{
result.push(-1)
}
}
return result
}
728x90
'JS 코테' 카테고리의 다른 글
<Javascript-CT> 기초 DAY 12 (0) | 2025.04.28 |
---|---|
<Javascript-CT> 기초 DAY 11 (0) | 2025.04.28 |
<Javascript-CT> 기초 DAY 9 (0) | 2025.04.27 |
<Javascript-CT> 기초 DAY 8 (1) | 2025.04.25 |
<Javascript-CT> 기초 DAY 6 (0) | 2025.04.24 |