오늘은 12,13일차
1. 배열 조각하기
var copyArr: [Int] = arr
for (i, target) in query.enumerated() {
guard target < copyArr.count else {return []}
let subArr = i % 2 == 0 ? copyArr[...target] : copyArr[target...]
copyArr = Array<Int>(subArr)
}
return copyArr
제목처럼 배열 깍아내는 문제
2. 리스트자르기
배열 순환문제
func default_slicer(num_list:[Int], start s: Int, end e: Int, interval term: Int = 1) -> [Int] {
guard s >= 0, e >= s, e < num_list.count, term < num_list.count else { return [] }
let index_arr = Array(stride(from: s, through: e, by: term))
return index_arr.map { index in
num_list[index]
}
}
guard slicer.count == 3 else { return [] }
let a: Int = slicer[0], b: Int = slicer[1], c: Int = slicer[2]
var result: [Int] = []
switch n {
case 1 : result = default_slicer(num_list: num_list, start: 0, end: b)
case 2: result = default_slicer(num_list: num_list, start: a, end: num_list.count - 1)
case 3: result = default_slicer(num_list: num_list, start: a, end: b)
case 4: result = default_slicer(num_list: num_list, start: a, end: b, interval: c)
default: return []
}
return result
엄청 간단한 문제라고 생각했으나 문제를 잘못 생각해서 찾는데 몇 시간 걸린거같다.
아무리 생각해도 잘못된 부분이 없었는데 문제를 잘못 읽고 이해했다.
입력 제한을
- 0 ≤ a ≤ b ≤ num_list의 길이 - 1
라는걸 a는 시작인덱스 b는 끝인덱스니 b는 항상 a보다 크겠지 라고 이해해버려서 s >= 0, e >s 라고 써버리고 이걸 찾지 못해서 고생많이했다.
입력제한을 따로 체크 하는게 영 귀찮아져서 대충했더니 이런 실수가 발생... 다음 문제부턴 입력제한을 바로 코드위 주석으로 달아두고 작성해야겠다.
아래는 내가 쓴 테스트 코드 공유.
print(solution(4, [1, 5, 2], [1, 2, 3, 4, 5, 6, 7, 8, 9] ) == [2, 4, 6])
print(solution(4, [2, 7, 3], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) == [2, 5])
print(solution(4, [1, 5, 2], [4, 5, 6, 7, 8, 9]) == [5, 7, 9])
print(solution(1, [1, 5, 2], [1, 2, 3, 4, 5, 6, 7, 8, 9]) == [1, 2, 3, 4, 5, 6])
print(solution(2, [0, 1, 1], [10, 8, 6, 4, 2]) == [10, 8, 6, 4, 2])
print(solution(1, [0, 3, 1], [1, 2, 3, 4, 5]) == [1, 2, 3, 4]); // [1, 2, 3, 4]
print(solution(1, [0, 2, 1], [10, 20, 30, 40]) == [10, 20, 30]); // [10, 20, 30]
print(solution(1, [0, 1, 1], [5, 10, 15]) == [5, 10]); // [5, 10]
print(solution(1, [0, 4, 1], [7, 14, 21, 28, 35, 42]) == [7, 14, 21, 28, 35]); // [7, 14, 21, 28, 35]
print(solution(1, [0, 5, 1], [2, 4, 6, 8, 10, 12]) == [2, 4, 6, 8, 10, 12]); // [2, 4, 6, 8, 10, 12]
print(solution(2, [1, 0, 0], [1, 2, 3, 4, 5]) == [2, 3, 4, 5]); // [2, 3, 4, 5]
print(solution(2, [2, 0, 0], [10, 20, 30, 40]) == [30, 40]); // [30, 40]
print(solution(2, [1, 0, 0], [5, 10, 15]) == [10, 15]); // [10, 15]
print(solution(2, [3, 0, 0], [7, 14, 21, 28, 35, 42]) == [28, 35, 42]); // [28, 35, 42]
print(solution(2, [4, 0, 0], [2, 4, 6, 8, 10, 12]) == [10, 12]); // [10, 12]
print(solution(3, [1, 3, 0], [1, 2, 3, 4, 5]) == [2, 3, 4]); // [2, 3, 4]
print(solution(3, [0, 2, 0], [10, 20, 30, 40]) == [10, 20, 30]); // [10, 20, 30]
print(solution(3, [1, 1, 0], [5, 10, 15]) == [10]); // [10]
print(solution(3, [2, 4, 0], [7, 14, 21, 28, 35, 42]) == [21, 28, 35]); // [21, 28, 35]
print(solution(3, [3, 5, 0], [2, 4, 6, 8, 10, 12]) == [8, 10, 12]); // [8, 10, 12]
print(solution(4, [1, 4, 2], [1, 2, 3, 4, 5]) == [2, 4]); // [2, 4]
print(solution(4, [0, 3, 2], [10, 20, 30, 40]) == [10, 30]); // [10, 30]
print(solution(4, [0, 2, 1], [5, 10, 15]) == [5, 10, 15]); // [5, 10, 15]
print(solution(4, [1, 5, 2], [7, 14, 21, 28, 35, 42]) == [14, 28, 42]); // [14, 28, 42]
print(solution(4, [2, 5, 2], [2, 4, 6, 8, 10, 12]) == [6, 10]); // [6, 10]
따로 입력, 테스트에 대한 함수를 안만들어놔서 적는데 고생좀 했다
이번 기회로 하나 만들어둬야할까? 그건또 귀찮아서 모르겠다
3. 왼쪽 오른쪽
배열에서 원소 인덱스 찾기
// 1 ≤ str_list의 길이 ≤ 20
// str_list는 "u", "d", "l", "r" 네 개의 문자열로 이루어져 있습니다.
guard (1...20) ~= str_list.count else { return ["-1"] }
let copy_arr = Array(str_list)
let lIndex = str_list.firstIndex { $0 == "l" }
let rIndex = str_list.firstIndex { $0 == "r" }
// "l"이나 "r"이 없다면 빈 리스트를 return
guard lIndex != nil || rIndex != nil else { return [] }
let lValue = lIndex ?? str_list.count
let rValue = rIndex ?? str_list.count
if lValue < rValue {
return copy_arr[..<lValue].map { $0 }
} else if rValue < lValue {
return copy_arr[(rValue + 1)...].map { $0 }
}
return ["error"]
그냥 둘다 찾아서 값 비교해줬다
끝!
어제치를 안해서 한주로 안끝나버렸다.
할일없어서 심심하면 진도좀 빼야지
'iOS > 프로그래머스 - 코딩테스트 문제' 카테고리의 다른 글
10. day19 문자열, 리스트(배열) (0) | 2024.07.02 |
---|---|
9. day15,16 리스트(배열), 문자열 (0) | 2024.07.01 |
7. day10 문자열, day11 리스트(배열) (0) | 2024.06.28 |
6. day7 반복문, day8 조건문, 문자열 (0) | 2024.06.27 |
5. day5 조건문, day6 조건문 반복문 (0) | 2024.06.26 |