1. 리스트 자르기
정수 n과 정수 3개가 담긴 리스트 slicer 그리고 정수 여러 개가 담긴 리스트 num_list가 주어집니다. slicer에 담긴 정수를 차례대로 a, b, c라고 할 때, n에 따라 다음과 같이 num_list를 슬라이싱 하려고 합니다.
- n = 1 : num_list의 0번 인덱스부터 b번 인덱스까지
- n = 2 : num_list의 a번 인덱스부터 마지막 인덱스까지
- n = 3 : num_list의 a번 인덱스부터 b번 인덱스까지
- n = 4 : num_list의 a번 인덱스부터 b번 인덱스까지 c 간격으로
올바르게 슬라이싱한 리스트를 return하도록 solution 함수를 완성해주세요.
제한사항
- n 은 1, 2, 3, 4 중 하나입니다.
- slicer의 길이 = 3
- slicer에 담긴 정수를 차례대로 a, b, c라고 할 때
- 0 ≤ a ≤ b ≤ num_list의 길이 - 1
- 1 ≤ c ≤ 3
- 5 ≤ num_list의 길이 ≤ 30
- 0 ≤ num_list의 원소 ≤ 100
입출력 예
n | slicer | num_list | |
입출력 예 설명
입출력 예 #1
- [1, 2, 3, 4, 5, 6, 7, 8, 9]에서 1번 인덱스부터 5번 인덱스까지 자른 리스트는 [2, 3, 4, 5, 6]입니다.
입출력 예 #2
- [1, 2, 3, 4, 5, 6, 7, 8, 9]에서 1번 인덱스부터 5번 인덱스까지 2개 간격으로 자른 리스트는 [2, 4, 6]입니다.
제출 답안
import Foundation
func solution(_ n: Int, _ slicer: [Int], _ num_list: [Int]) -> [Int] {
// slicer 리스트에서 a, b, c 값을 추출
let (a, b, c) = (slicer[0], slicer[1], slicer[2])
switch n {
case 1:
// num_list의 0번 인덱스부터 b번 인덱스까지 슬라이싱
return Array(num_list[0...b])
case 2:
// num_list의 a번 인덱스부터 마지막까지 슬라이싱
return Array(num_list[a...])
case 3:
// num_list의 a번 인덱스부터 b번 인덱스까지 슬라이싱
return Array(num_list[a...b])
case 4:
// num_list의 a번 인덱스부터 b번 인덱스까지 c 간격으로 슬라이싱
return stride(from: a, through: b, by: c).map { num_list[$0] }
default:
// n이 1~4가 아닌 경우 빈 배열 반환
return []
}
}
2. 첫 번째로 나오는 음수
정수 리스트 num_list가 주어질 때, 첫 번째로 나오는 음수의 인덱스를 return하도록 solution 함수를 완성해주세요. 음수가 없다면 -1을 return합니다.
제한사항
- 5 ≤ num_list의 길이 ≤ 100
- -10 ≤ num_list의 원소 ≤ 100
입출력 예
num_list | result |
[12, 4, 15, 46, 38, -2, 15] | 5 |
[13, 22. 53, 24, 15, 6] | -1 |
입출력 예 설명
입출력 예 #1
- 5번 인덱스에서 음수가 처음 등장하므로 5를 return합니다.
입출력 예 #2
- 음수가 없으므로 -1을 return합니다.
제출 답안
import Foundation
func solution(_ num_list:[Int]) -> Int {
if let result = num_list.firstIndex(where: { $0 < 0 }) {
return result
}
return -1
}
3. 배열 만들기 3
정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다.
intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.
이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ arr의 길이 ≤ 100,000
- 1 ≤ arr의 원소 < 100
- 1 ≤ a1 ≤ b1 < arr의 길이
- 1 ≤ a2 ≤ b2 < arr의 길이
입출력 예
arr | intervals | result |
[1, 2, 3, 4, 5] | [[1, 3], [0, 4]] | [2, 3, 4, 1, 2, 3, 4, 5] |
입출력 예 설명
입출력 예 #1
- 첫 번째 구간에 해당하는 배열은 [2, 3, 4] 입니다.
- 두 번째 구간에 해당하는 배열은 [1, 2, 3, 4, 5] 입니다.
- 따라서 이 두 배열을 앞뒤로 붙인 배열인 [2, 3, 4, 1, 2, 3, 4, 5]를 return 합니다.
제출 답안
func solution(_ arr: [Int], _ intervals: [[Int]]) -> [Int] {
// 첫 번째 구간의 시작과 끝 인덱스
let (a1, b1) = (intervals[0][0], intervals[0][1])
// 두 번째 구간의 시작과 끝 인덱스
let (a2, b2) = (intervals[1][0], intervals[1][1])
// 첫 번째 구간과 두 번째 구간을 슬라이싱하여 합친 배열 반환
return Array(arr[a1...b1]) + Array(arr[a2...b2])
}
4. 2의 영역
정수 배열 arr가 주어집니다. 배열 안의 2가 모두 포함된 가장 작은 연속된 부분 배열을 return 하는 solution 함수를 완성해 주세요.
단, arr에 2가 없는 경우 [-1]을 return 합니다.
제한사항
- 1 ≤ arr의 길이 ≤ 100,000
- 1 ≤ arr의 원소 ≤ 10
입출력 예
arr | result |
[1, 2, 1, 4, 5, 2, 9] | [2, 1, 4, 5, 2] |
[1, 2, 1] | [2] |
[1, 1, 1] | [-1] |
[1, 2, 1, 2, 1, 10, 2, 1] | [2, 1, 2, 1, 10, 2] |
입출력 예 설명
입출력 예 #1
- 2가 있는 인덱스는 1번, 5번 인덱스뿐이므로 1번부터 5번 인덱스까지의 부분 배열인 [2, 1, 4, 5, 2]를 return 합니다.
입출력 예 #2
- 2가 한 개뿐이므로 [2]를 return 합니다.
입출력 예 #3
- 2가 배열에 없으므로 [-1]을 return 합니다.
입출력 예 #4
- 2가 있는 인덱스는 1번, 3번, 6번 인덱스이므로 1번부터 6번 인덱스까지의 부분 배열인 [2, 1, 2, 1, 10, 2]를 return 합니다.
제출 답안
import Foundation
func solution(_ arr: [Int]) -> [Int] {
// 배열 arr에서 첫 번째로 등장하는 2의 인덱스를 찾음
guard let firstIndex = arr.firstIndex(of: 2),
// 배열 arr에서 마지막으로 등장하는 2의 인덱스를 찾음
let lastIndex = arr.lastIndex(of: 2) else {
// 배열에 2가 하나도 없으면 [-1] 반환
return [-1]
}
// 첫 번째 2부터 마지막 2까지의 구간을 슬라이싱하여 반환
return Array(arr[firstIndex...lastIndex])
}
5. 배열 조각하기
정수 배열 arr와 query가 주어집니다.
query를 순회하면서 다음 작업을 반복합니다.
- 짝수 인덱스에서는 arr에서 query[i]번 인덱스를 제외하고 배열의 query[i]번 인덱스 뒷부분을 잘라서 버립니다.
- 홀수 인덱스에서는 arr에서 query[i]번 인덱스는 제외하고 배열의 query[i]번 인덱스 앞부분을 잘라서 버립니다.
위 작업을 마친 후 남은 arr의 부분 배열을 return 하는 solution 함수를 완성해 주세요.
제한사항
- 5 ≤ arr의 길이 ≤ 100,000
- 0 ≤ arr의 원소 ≤ 100
- 1 ≤ query의 길이 < min(50, arr의 길이 / 2)
- query의 각 원소는 0보다 크거나 같고 남아있는 arr의 길이 보다 작습니다.
입출력 예
arr | query | result |
[0, 1, 2, 3, 4, 5] | [4, 1, 2] | [1, 2, 3] |
입출력 예 설명
입출력 예 #1
- 이번에 매번 처리할 query의 값과 처리 전후의 arr의 상태를 표로 나타내면 다음과 같습니다.
query의 값 | query 처리 전 | query 처리 후 | 비고 |
4 | [0, 1, 2, 3, 4, 5] | [0, 1, 2, 3, 4] | 0번 인덱스의 쿼리이므로 뒷부분을 자른다. |
1 | [0, 1, 2, 3, 4] | [1, 2, 3, 4] | 1번 인덱스의 쿼리이므로 앞부분을 자른다. |
2 | [1, 2, 3, 4] | [1, 2, 3] | 2번 인덱스의 쿼리이므로 뒷부분을 자른다. |
- 따라서 [1, 2, 3]을 return 합니다.
제출 답안
import Foundation
func solution(_ arr: [Int], _ query: [Int]) -> [Int] {
var result = arr // 원본 배열을 수정할 변수
for (index, value) in query.enumerated() {
if index % 2 == 0 {
// 짝수 인덱스: query[i] 이후의 요소를 버림 (query[i] 포함)
result = Array(result[0...value])
} else {
// 홀수 인덱스: query[i] 이전의 요소를 버림 (query[i] 포함)
result = Array(result[value...])
}
}
return result
}
'프로그래머스 기초문제' 카테고리의 다른 글
[프로그래머스 기초문제] Day 14 리스트(배열) (0) | 2025.03.06 |
---|---|
[프로그래머스 기초문제] Day 13 리스트(배열) (0) | 2025.03.04 |
[프로그래머스 기초문제] Day 11 리스트(배열) (0) | 2025.02.27 |
[프로그래머스 기초문제] Day 10 문자열 (0) | 2025.02.27 |
[프로그래머스 기초문제] Day 9 문자열 (0) | 2025.02.25 |