1. 문자 개수 세기
알파벳 대소문자로만 이루어진 문자열 my_string이 주어질 때, my_string에서 'A'의 개수, my_string에서 'B'의 개수,..., my_string에서 'Z'의 개수, my_string에서 'a'의 개수, my_string에서 'b'의 개수,..., my_string에서 'z'의 개수를 순서대로 담은 길이 52의 정수 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 ≤ my_string의 길이 ≤ 1,000
입출력 예
my_string | result |
"Programmers" | [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0] |
입출력 예 설명
입출력 예 #1
- 예제 1번의 my_string에서 'P'가 1개, 'a'가 1개, 'e'가 1개, 'g'가 1개, 'm'이 2개, 'o'가 1개, 'r'가 3개, 's'가 1개 있으므로 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0]를 return 합니다.
제출 답안
import Foundation
func solution(_ my_string: String) -> [Int] {
// 결과 배열 초기화 (길이 52, 모두 0으로 초기화)
var result = Array(repeating: 0, count: 52)
for char in my_string {
if let asciiValue = char.asciiValue {
if char.isUppercase {
// 대문자 'A' (ASCII 65) ~ 'Z' (ASCII 90)
result[Int(asciiValue) - 65] += 1
} else if char.isLowercase {
// 소문자 'a' (ASCII 97) ~ 'z' (ASCII 122)
result[Int(asciiValue) - 97 + 26] += 1
}
}
}
return result
}
2. 배열 만들기1
정수 n과 k가 주어졌을 때, 1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ n ≤ 1,000,000
- 1 ≤ k ≤ min(1,000, n)
입출력 예
n | k | result |
10 | 3 | [3, 6, 9] |
15 | 5 | [5, 10, 15] |
입출력 예 설명
입출력 예 #1
- 1 이상 10 이하의 3의 배수는 3, 6, 9 이므로 [3, 6, 9]를 return 합니다.
입출력 예 #2
- 1 이상 15 이하의 5의 배수는 5, 10, 15 이므로 [5, 10, 15]를 return 합니다.
제출 답안
import Foundation
func solution(_ n:Int, _ k:Int) -> [Int] {
return (1...n).filter { $0 % k == 0 }
}
3. 글자 지우기
문자열 my_string과 정수 배열 indices가 주어질 때, my_string에서 indices의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 ≤ indices의 길이 < my_string의 길이 ≤ 100
- my_string은 영소문자로만 이루어져 있습니다
- 0 ≤ indices의 원소 < my_string의 길이
- indices의 원소는 모두 서로 다릅니다.
입출력 예
my_string | indices | result |
"apporoograpemmemprs" | [1, 16, 6, 15, 0, 10, 11, 3] | "programmers" |
입출력 예 설명
입출력 예 #1
- 예제 1번의 my_string의 인덱스가 잘 보이도록 표를 만들면 다음과 같습니다.
`indices`에 있는 인덱스의 글자들을 지우고 이어붙이면 "programmers"가 되므로 이를 return 합니다.
제출 답안
import Foundation
func solution(_ my_string: String, _ indices: [Int]) -> String {
let indicesSet = Set(indices) // 빠른 조회를 위해 Set으로 변환
return my_string.enumerated()
.filter { !indicesSet.contains($0.offset) } // indices에 없는 문자만 필터링
.map { String($0.element) } // 문자 배열로 변환
.joined() // 문자열로 결합
}
4. 카운트 다운
정수 start_num와 end_num가 주어질 때, start_num에서 end_num까지 1씩 감소하는 수들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
제한사항
- 0 ≤ end_num ≤ start_num ≤ 50
입출력 예
start_num | end_num | result |
10 | 3 | [10, 9, 8, 7, 6, 5, 4, 3] |
입출력 예 설명
입출력 예 #1
- 10부터 3까지 1씩 감소하는 수를 담은 리스트는 [10, 9, 8, 7, 6, 5, 4, 3]입니다.
제출 답안
import Foundation
func solution(_ start_num:Int, _ end_num:Int) -> [Int] {
return (end_num...start_num).reversed()
}
5. 가까운 1 찾기
정수 배열 arr가 주어집니다. 이때 arr의 원소는 1 또는 0입니다. 정수 idx가 주어졌을 때, idx보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요.
단, 만약 그러한 인덱스가 없다면 -1을 반환합니다.
제한사항
- 3 ≤ arr의 길이 ≤ 100'000
- arr의 원소는 전부 1 또는 0입니다.
입출력 예
arr | idx | result |
[0, 0, 0, 1] | 1 | 3 |
[1, 0, 0, 1, 0, 0] | 4 | -1 |
[1, 1, 1, 1, 0] | 3 | 3 |
입출력 예 설명
입출력 예 #1
- 1보다 크면서 원소가 1인 가장 작은 인덱스는 3입니다. 따라서 3을 return 합니다.
입출력 예 #2
- 4번 인덱스 이후에 1은 등장하지 않습니다. 따라서 -1을 return 합니다.
입출력 예 #3
- 3번 인덱스의 값이 1입니다. 따라서 3을 return 합니다.
제출 답안
import Foundation
func solution(_ arr: [Int], _ idx: Int) -> Int {
return arr[idx...].firstIndex(where: { $0 == 1 }) ?? -1
}

'프로그래머스 기초문제' 카테고리의 다른 글
[프로그래머스 기초문제] Day 13 리스트(배열) (0) | 2025.03.04 |
---|---|
[프로그래머스 기초문제] Day 12 리스트(배열) (0) | 2025.03.01 |
[프로그래머스 기초문제] Day 10 문자열 (0) | 2025.02.27 |
[프로그래머스 기초문제] Day 9 문자열 (0) | 2025.02.25 |
[프로그래머스 기초문제] Day 8 조건문, 문자열 (0) | 2025.02.25 |