프로그래머스- 46

김정현·2023년 6월 18일
0

프로그래머스

목록 보기
46/46

문제에 친절하게 애니메이션 설명까지 나와있었다.

우선 직접 행렬을 만들어서 푸는건 어려울거 같고, 접근이 어려웠다..
어떤식으로 접근할지조차 모르니까 그냥 손을 댈 수도 없었다.

한참을 손놓고 있다가 규칙이 없으면 못풀겠다 생각이 들어서 하나하나 들여다 보았다. 얼핏보면 보이지 않았지만, 결론적으로 찾았다.

규칙은 left와 right사이의 수를 n으로 나눈후 +1 하거나, n으로 나눈 나머지에 +1 을 한 수중 큰 수가 오는 것이다. 결국 행렬과는 관계가 없는게 맞았다.

import Foundation

func solution(_ n:Int, _ left:Int64, _ right:Int64) -> [Int] {
    var result: [Int] = []
    for i in Int(left)...Int(right){
        if i / n > i % n {
            result.append(i/n+1)
        }else{
            result.append(i%n+1)
        }
    }
    return result
}

한번 규칙을 찾고나니 코드 자체는 간단했다. 한가지는 int64를 문제에서 굳이 고집해서 Int를 써야한다는점 정도 말고는 간단했다.

다른사람의 풀이로는

func solution(_ n: Int, _ left: Int64, _ right: Int64) -> [Int] {
    return (left...right).map { max(Int($0) / n, Int($0) % n) + 1 }
}

똑같은 구조이지만 map을 사용해서 1줄로 아주 간단하게 끝냈다. 어차피 모든 원소에 대해서 적용하는 것이라면 for문이 아니라 맵이 더 좋았을 거 같다.

0개의 댓글