TIL/알고리즘 공부

백준 10250번 Swift 알고리즘 연습

여의도사노비 2022. 8. 26. 17:32
728x90

아래에서부터 위로 순서대로 자리를 배치하는 문제이다.

 

이 문제를 풀면서 생각한 논리적 흐름은

  1. n번째로 들른 사람을 층으로 나눴을 때 나오는 값에 1을 더해준 값이 '호실' 번호이다.
  2. n번째로 들른 사람을 층으로 나눴을 때 나오는 나머지가 '층' 번호이다.
  3. 이때 층과 n의 값이 같을 경우 그 층 맨 꼭대기에 사는 케이스이므로 값을 '층'으로 고정시켜주어야한다.
  4. 만약 '호실'의 값이 10을 넘지 않으면 '401호'와 같은 값이 나올때 '41호'로 출력될 수 있으니
  5. 10보다 낮은 값엔 앞자리에 0을 붙여준다.

점점 경우의 수와 분리해서 생각해야할 케이스 수가 늘어남에 따라 머리가 아프다 ^^...

평소에 수학 논리를 확인할 때 직접 손으로 풀어서 정리하는 경우가 대부분이었어서 그런지 조금만 복잡해도 머리 속으로 계산이 안된다..!

앞으로는 무겁지만 노트북과 아이패드 두개를 들고 다녀야 할 것 같다 ㅠㅠ

 

 

* 10250번

let count = Int(readLine()!)!

for _ in 1...count {
    
    let input = readLine()!.split(separator: " ").map { Int(String($0))! }
    let value = input[2] / input[0]
    let remain = input[2] % input[0]
    
    if remain == 0 {
        if value >= 10 {
            print("\(input[0])\(value)")
        } else {
            print("\(input[0])0\(value)")
        }
    } else {
        if (value + 1) >= 10 {
            print("\(remain)\(value+1)")
        } else {
            print("\(remain)0\(value+1)")
        }
    }
}

 

 

정리(Today I Learned)

  1. 없음