24일날 시작한 기초 트레이닝이 27일까지 이어지고 day7,8의 란이 열렸다
1. 수열과 구간 쿼리 4
s,e,k 값이 주어질때 s~e 구간의 순회 문제.
var copyArr = arr
for query in queries {
let s = query[0], e = query[1], k = query[2]
for i in s...e {
if i % k != 0 { continue }
copyArr[i] += 1
}
}
return copyArr
2. 배열 만들기 2
숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return
let pattern: String = "^[0,5]*$"
var result: [Int] = []
for i in l ... r {
let str: String = .init(i)
if (str.range(of: pattern, options: .regularExpression) != nil) {
result.append(i)
}
}
return result.isEmpty ? [-1] : result
처음엔 5와 0으로된 이진법으로 계산해서 하려고했으나 잘 안풀려서 결국 그냥 모든 배열에서 필터하는 방법으로 변경
작성하고나니 필터함수로 썻으면 더 짧게 했을거같다
3. 배열 만들기 4
배열을 순회해서 필터링하기
var stk: [Int] = []
var i: Int = 0
while i < arr.count {
if stk.isEmpty {
stk.append(arr[i])
i += 1
} else if stk.last! < arr[i] {
stk.append(arr[i])
i += 1
} else if stk.last! >= arr[i] {
_ = stk.popLast()
}
}
return stk
문제 지문 그대로 코드로 옴겼더니 좀 길어졌다 조건문 위 두개를 하나로 합칠수 있지않았을까
4. 주사위 게임 3
주사위 네개의 값이 주어졌을때 각각 계산하는게 달라지는 문제.
var dice: [Int : Int] = [:]
[a,b,c,d].forEach { num in
if dice[num] == nil {
dice[num] = 1
} else {
dice[num]! += 1
}
}
if dice.count == 1 {
return 1111 * a
}
if dice.count == 2 {
var max: Int = 0, p: Int = 0, q: Int = 0
for (key, value) in dice {
if max < value {
max = value
p = key
}
}
q = dice.keys.filter { key in
key != p
}.first!
// 주사위가 3개가같을때와 2개가 같을때
return max == 3 ? (10 * p + q) * (10 * p + q) : (p + q) * abs(p-q)
}
if dice.count == 3 {
// 주사위 한쌍이 같고 나머지 달라
var max: Int = 0, p: Int = 0
for (key, value) in dice {
if max < value {
max = value
p = key
}
}
let res: [Int] = dice.keys.filter { key in
key != p
}.map { $0 }
guard res.count == 2 else { return -1 }
return res[0] * res[1]
}
return min(a, b, c, d)
문제 순서대로 쭉 적어서 겹치는 부분이 좀 보인다. 반은 줄일 수 있을거같다 하지만 귀찮다 점수는 받았으니 괜찮겠지
5. 문자열 여러 번 뒤집기
원본 문자열과 문자열 인덱스 범위가 배열로 주어지고 각 인덱스 범위를 뒤집어서 출력하는 문제
func reverse(_ str: String, _ s: Int, _ e: Int) -> String {
var copy_arr = Array(str).map { String($0) }
let target = copy_arr[s...e].map { $0 }
for i in s...e {
copy_arr[i] = target[e - i]
}
return copy_arr.joined()
}
var copy_str: String = my_string
for q in queries {
copy_str = reverse(copy_str, q[0], q[1])
}
return copy_str
이전에 비슷한 문제가 있어서 해당 코드를 reverse로 함수화해서 그대로 사용.
답을 내고 보니 replaceSubrange 라는걸 사용해서 문자열 수정해본다는게 잊고있었다.
아무튼 이렇게 8일치까지 끝
9일치는 이미 달성되어있고 10일치는 한문제니 다음 포스트는 한문제가 될것같다. 오늘 더이상 문제를 안푼다면 말이다
'iOS > 프로그래머스 - 코딩테스트 문제' 카테고리의 다른 글
8. day12 , day13 리스트 (0) | 2024.06.30 |
---|---|
7. day10 문자열, day11 리스트(배열) (0) | 2024.06.28 |
5. day5 조건문, day6 조건문 반복문 (0) | 2024.06.26 |
4. day3 연산, day4 연산 조건문 (0) | 2024.06.25 |
3. day2 출력,연산 (0) | 2024.06.24 |