[Coding Test][Python] 백준 2775번: 부녀회장이 될테야

2026. 3. 14. 18:21·개발/코테 준비
반응형

문제

https://www.acmicpc.net/problem/2775

 

코드

rows = 15
cols = 15

# 아파트: 15x15의 2차원 배열, 0으로 초기화 
apt = [[0 for col in range(cols)] for row in range(rows)]

# Base Case - 0층, 1호 거주민 수 채우기
## 0층 
for i in range(1, 15):
    apt[0][i] = i 

## 0층~14층까지 1호에는 1명만 산다
for i in range(15):
    apt[i][1] = 1 
    
# 1~14층, 2~14호 까지 채우기
for i in range(1, 15):
    for j in range(2, 15):
        apt[i][j] = apt[i][j-1] + apt[i-1][j]

# 테스트
## 테스트 케이스 수
T = int(input()) 

## 풀이
for i in range(T):
    k = int(input()) # 층
    n = int(input()) # 호
    
    print(apt[k][n])

이 문제의 핵심은 특정 층, 특정 호수의 거주민 수를 구하기 위해 매번 아래층 사람들을 처음부터 다 더할 필요가 없다는 것이다.

표를 그려 규칙을 찾아보면 다음과 같은 점화식이 도출된다.

DP(k, n) = DP(k, n-1) + DP(k-1, n)

(현재 집 거주민 = 같은 층 옆집 거주민 + 아래층 같은 호수 거주민)

 

즉, 이전에 계산해 둔 결과를 저장해두고 필요할 때 꺼내 쓴다는 다이나믹 프로그래밍(DP)의 핵심 원리를 활용한 문제라고 할 수 있다.

(이는 서버에서 DB 조회를 줄이고 응답 속도를 높이기 위해 사용하는 Redis와 같은 캐시 시스템의 기본 철학과 동일하다.)

 

관점 1: 사전 연산

처음 코드를 작성할 때는 테스트 케이스 입력이 들어올 때마다 매번 거주민 수를 계산하도록 반복문을 설계하는 실수를 했다.

하지만 만약 T가 10만, 100만 건이라면 수십배의 트래픽이 순간적으로 발생했을 때 시스템은 무너진다.

 

따라서 요청이 올 때마다 무거운 계산을 수행해서는 안 된다고 판단했다.

아파트 거주민 수 조건처럼 '미리 정해져 있고 변하지 않는 데이터'는 트래픽(요청)을 받기 전에 미리 계산하여 메모리(배열)에 올려두고, 요청이 오면 배열의 인덱스로 접근해 O(1)의 속도로 즉시 응답(조회)하는 방식으로 아키텍처를 변경해야 한다. 

 

관점 2: Base Case 세팅

복잡한 점화식(비즈니스 로직)을 실행하기 전에 가장 선행되어야 할 작업은 0층과 모든 층의 1호라는 기본값을 배열에 정확히 세팅하는 것이었다.

결제 및 금융 서비스에서는 수많은 거래건을 수백가지 요구사항으로 계산해도 빠르게 오차없이 계산이 가능한 정산 시스템을 만드는 게 중요하다.

기초 데이터에 얕은 복사(Shallow Copy) 같은 결함이 발생하면 그 위에 쌓아 올린 좋은 로직도 결국 잘못된 결과(오차)를 뱉어내게 될 것이다. 따라서 파이썬의 list comprehension을 활용해 독립적이고 안전하게 2차원 배열의 밑그림을 그리는 것이 선행되어야 했다. 

반응형

'개발 > 코테 준비' 카테고리의 다른 글

[Coding Test][Python] 백준 10989번: 수 정렬하기 3 (계수 정렬)  (0) 2026.03.20
[Coding Test][Python] 백준 2869번: 달팽이는 올라가고 싶다.  (0) 2026.03.14
[Coding Test][Python] 백준 2609번: 최대공약수와 최소공배수  (0) 2026.03.13
[Coding Test/Python] 백준 1259번: 팰린드롬수  (0) 2026.03.11
[Coding Test/Python] 백준 15829번: Hashing  (0) 2026.03.11
'개발/코테 준비' 카테고리의 다른 글
  • [Coding Test][Python] 백준 10989번: 수 정렬하기 3 (계수 정렬)
  • [Coding Test][Python] 백준 2869번: 달팽이는 올라가고 싶다.
  • [Coding Test][Python] 백준 2609번: 최대공약수와 최소공배수
  • [Coding Test/Python] 백준 1259번: 팰린드롬수
danieLee
danieLee
개발일지
  • danieLee
    Code log
    danieLee
  • 전체
    오늘
    어제
    • 분류 전체보기 (77)
      • 개발 (76)
        • C++ (3)
        • java (6)
        • JavaScript (9)
        • python (0)
        • AWS (2)
        • Docker (6)
        • git (0)
        • 백엔드 (4)
        • Spring (7)
        • Django (2)
        • AI (3)
        • 코테 준비 (13)
        • 알고리즘 (6)
        • SKALA 4기 (13)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    서버
    vue.js
    Ai
    4기
    코테
    개발자
    spring
    JavaScript
    파이썬
    API
    프론트
    대학생
    백엔드
    알고리즘
    js
    개발
    java
    프로그래머스
    skala
    개념
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.1
danieLee
[Coding Test][Python] 백준 2775번: 부녀회장이 될테야
상단으로

티스토리툴바