문제에 대한 이해
- 중복으로 칠 할 수 있음
- 배열안에 있는 숫자는 꼭 한번은 칠해야 함
예제 그림을 보면 이해하기 쉽습니다.
paint2 를 보면 2 ~ 5까지 칠했고, 그 다음에는 3 ~ 6 까지 칠했습니다.
결론적으로는 시작을 section 첫번째 인덱스부터 시작해서 m-1만큼 더하면 되는 문제입니다.
그럼 코드를 작성해보겠습니다.
1. m-1을 활용하여 코드 작성하기
func solution(_ n:Int, _ m:Int, _ section:[Int]) -> Int {
var answer = 0
// section의 첫번째 값과 m-1이 담기는 변수를 만들어줍니다.
var painted = 0
for i in 0..<section.count {
// section의 첫번째 인덱스가 0보다 크다면을 적용하여 첫번째 인덱스에서 + m-1이 될 수 있게 작성합니다.
if section[i] > painted {
painted = section[i] + m - 1
answer += 1
}
}
return answer
}
2. + m을 활용하여 코드 작성하기
뭔가 코드를 조금 더 다른방법으로 활용할 수있을 거 같다는 느낌이 들어서
m-1 보다 m을 더해주었고, >=를 활용해봤습니다.
구하는 식은 다음과 같습니다.
func solution(_ n:Int, _ m:Int, _ section:[Int]) -> Int {
// section의 첫번째 인덱스
var now = section[0]
// 최소 횟수
var counter = 0
return counter
}
section의 첫번째 인덱스를 구하기 위해 section[0]을 직접적으로 가져옵니다.
for문으로 section의 값을 하나씩 뽑으면서 m을 더해주고 더한 값이 section의 요소보다 크면 count를 1 올려줍니다.
func solution(_ n:Int, _ m:Int, _ section:[Int]) -> Int {
// 2
var now = section[0]
var counter = 0
for i in section {
// 첫번째 인덱스와 비교해야 하기 때문에 >=를 해준다
// >= 가 아니고 > 를 해주게 되면 두번째 인덱스 부터 시작한다.
if i >= now {
count += 1
now = i + m
}
}
return counter
}
자...이렇게 실행을 해보니
테스트 케이스 17번에서 런타임 에러가 발생했습니다.
왜 그랬나 찾아보니... section이 빈 배열일때 section[0]을 비교하려고 해서 발생하는 에러 였습니다.
해결방법으로는 다음 코드와 같습니다.
import Foundation
func solution(_ n:Int, _ m:Int, _ section:[Int]) -> Int {
// section이 비어있다면 0을 리턴
guard !section.isEmpty else {
return 0
}
var now = section[0]
var counter = 0
for s in section {
if s >= now {
counter += 1
now = s + m
}
}
return counter
}
'알고리즘' 카테고리의 다른 글
프로그래머스 LV.1 숫자 짝꿍 스위프트 (0) | 2023.05.05 |
---|---|
번외) for문 발전 에라토스테네스의 체에 대해 공부하다. (0) | 2023.05.04 |
프로그래머스 LV.1 기사단원의 무기 (0) | 2023.05.03 |
프로그래머스 LV.1 카드 뭉치 (0) | 2023.04.30 |
프로그래머스 LV.1 [1차] 다트 게임 (0) | 2023.04.29 |