알고리즘
[Swift 알고리즘] Codility lesson5 - CountDiv
코코종
2023. 1. 10. 22:11
728x90
안녕하세여 코코종입니다 ><
또 너무 바빴지 머에요.. (근데 이제 더 바쁠 예정이라 두렵따...)
간만에 한문제를 또 풀었답니다 쿠쿠 기특하다 나...
처음에 문제를 정리하는데 바로 아이디어가 슥! 떠올라서 풀고 '나 천잰가?' 했는데 역시나 틀렸습니다 ^^
코딜리티 문제들은 엣지케이스를 특히나 조심하고 문제를 잘.. 읽어야하는데 제가 또 산만해서(+자만) 틀려버렸지 모에여^^
주석으로 아이디어에 대한 설명을 적어뒀지만 간단하게 설명하자면
A...B 사이에 K로 나눈 나머지가 0인(== '나눠지는' 이라고 생각해서 틀렸죠?) 갯수를 구하는 문제였는데요.
당~연히 하나씩 나누면... 언제 다해여...
그래서 처음에 든 생각이 A부터 이제 하나씩 보면서 가다가 K의 배수를 찾으면 그 담에는 K씩 점프하면서 B이하로 가면 되지 않을까? 했습니다. 그러다보니 직접 하나씩 확인해 가는거보다 'B이하에서 K의 배수 갯수 - A보다 작은거에서 K의 배수 갯수' 하면 되지않을까? 라는 생각으로 풀고 답도 너무 깔끔해서 맞은줄 알았져 ㅎ...
import Foundation
import Glibc
// you can write to stdout for debugging purposes, e.g.
// print("this is a debug message")
public func solution(_ A : Int, _ B : Int, _ K : Int) -> Int {
// A에서 B사이에서 K로 나눌 수 있는 애들의 갯수를 리턴한다.
// idea: 처음으로 K로 나눠지는걸 찾는다 -> 그담에 그담에 B이하에서 가능한 갯수를 구한다
// 어랏? 1~B 한 다음에 1~A-1 을 빼면 될지도?
let b: Int = B / K
let a: Int = (A-1) / K
return b - a
}
네.. 어림도 없었습니다. 제가 놓친 케이스는 바로 A가 0인 경우였는데요... 저는 (A-1) / K 를 했기 때문에 0일때 K의 mod는 0임에도 불구하고 제가 포함시키지를 못했네여 ㅎㅎ.. 그래도 답은 간결하게 나와서 기분이 좋았습니닷!
import Foundation
import Glibc
// you can write to stdout for debugging purposes, e.g.
// print("this is a debug message")
public func solution(_ A : Int, _ B : Int, _ K : Int) -> Int {
// A에서 B사이에서 K로 나눌 수 있는 애들의 갯수를 리턴한다.
// idea: 처음으로 K로 나눠지는걸 찾는다 -> 그담에 그담에 B이하에서 가능한 갯수를 구한다
// 어랏? 1~B 한 다음에 1~A-1 을 빼면 될지도?
// 틀린부분 -> mod이기 때문에 0은 무엇으로 나눠도 0이닷..
let b: Int = B / K // B이하 중 K의 배수
var a: Int = (A-1) / K // A미만 중 K의 배수
if A == 0 {
a = -1 // A가 포함되기 때문에
}
return b - a
}
728x90