TIL/알고리즘 공부

백준 2775번 Swift 알고리즘 연습

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

전형적인 수학 시간에 풀어봄직한 수열 문제이다.

마음 같아서는 시그마도 쓰고 싶고 점화식 펜으로 쓱 써서 풀고 싶지만 펜이 없어서 고통스러웠다.

위와 같이 각 층의 1호는 무조건 1이 출력 되어야하고 그 이외의 n 호수는 전층 호수를 1~n개까지 더한 값이다.

 

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

  1. 1호는 무조건 1을 print한다.
  2. 1층 2호는 (0층 1호 + 0층 2호)의 값... 2층 3호는 (1층 1호 + 1층 2호 + 1층 3호)의 값... 이렇게 지속된다.
  3. 즉 층 간의 값을 배열화하여 더해주자
  4. 근데 어떻게..?

이 문제 풀면서 진짜 머리가 아팠다.

결국 2차원 형태의 행렬 값을 이용하면 된다는 사실을 까마득하게 잊고 있었기에... 검색을 조금 해보고 깨달았다.

개발 공부를 하면서 이런 다차원 형태의 배열을 잘 사용해보지 않았어서 더 익숙하지 않았던 것 같다.

 

 

* 2775번

let count = Int(readLine()!)!
var downFloor = Array(repeating: Array(repeating: 1, count: 15), count: 15)

for _ in 1...count {
    
    var k = Int(readLine()!)!
    var n = Int(readLine()!)!
    
    for i in 1...n {
        downFloor[0][i] = i + 1
    }
    
    for i in 1...k {
        for j in 1...n {
            downFloor[i][j] = downFloor[i][j-1] + downFloor[i-1][j]
        }
    }
    print(downFloor[k][n-1])
}

 

 

정리(Today I Learned)

  1. 2차원 형태의 행렬은 Array안에 Array를 넣으면 된다. 앞으로 생각 이상으로 많이 쓰일 것 같다