Skip to main content

Command Palette

Search for a command to run...

[백준/Python] 2903번 : 중앙 이동 알고리즘

Published
1 min readView as Markdown
D

Web / iOS / Flutter Developer

문제

상근이는 친구들과 함께 SF영화를 찍으려고 한다. 이 영화는 외계 지형이 필요하다. 실제로 우주선을 타고 외계 행성에 가서 촬영을 할 수 없기 때문에, 컴퓨터 그래픽으로 CG처리를 하려고 한다.

외계 지형은 중앙 이동 알고리즘을 이용해서 만들려고 한다.

알고리즘을 시작하면서 상근이는 정사각형을 이루는 점 4개를 고른다. 그 후에는 다음과 같은 과정을 거쳐서 지형을 만든다.

  1. 정사각형의 각 변의 중앙에 점을 하나 추가한다.

  2. 정사각형의 중심에 점을 하나 추가한다.

초기 상태에서 위와 같은 과정을 한 번 거치면 총 4개의 정사각형이 새로 생긴다. 이와 같은 과정을 상근이가 만족할 때 까지 계속한다.

상근이는 어떤 점은 한 개 보다 많은 정사각형에 포함될 수 있다는 사실을 알았다. 메모리 소모량을 줄이기 위해서 중복하는 점을 한 번만 저장하려고 한다. 과정을 N번 거친 후 점 몇 개를 저장해야 하는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. (1 ≤ N ≤ 15)

출력

첫째 줄에 과정을 N번 거친 후 점의 수를 출력한다.

풀이

N이 증가할 때마다 한 변에 찍히는 점의 개수가 2**N만큼 증가한다는 규칙이 있기 때문에 이를 코드로 단순하게 구현만 해주면 된다.

N = int(input())
x = 2
for i in range(N):
    x += 2**i
print(x**2)

처음 문제를 보고 접근법을 점의 개수를 어떻게 표현해야할지에 초점을 맞추어 생각하다보니 굉장히 단순한 수학 문제임에도 시간이 오래 걸리게 되었다. 단순한 방법부터 고민하는 습관을 가져야할 것 같다.

4 views

Problem Solving

Part 1 of 50

Baekjoon, 프로그래머스 문제 풀이 포스트를 작성합니다.

More from this blog

의사난수생성기(prng)를 활용한 클라이언트 사이드 데이터 셔플

모든 사용자에게 동일한 랜덤 순서를 보여줘야 하는데, DB나 서버에 의존하고 싶지 않다면? 문제 상황 팀의 신규 프로젝트를 맡아 작업 중인 와중에 이런 요구사항을 받았습니다. "캘린더에 표시되는 참여자 순서를 매일 다르게 섞어주세요. 단, 같은 날에는 모든 사용자가 동일한 순서를 봐야 해요." 아.. 아직 짬바가 부족한 저는 이 요구사항을 듣자마자 온갖 방법을 고민해보게 됐습니다. 저는 보통 일단 요구사항의 핵심을 단순화하여 로직으로 바꾼...

Jan 7, 20265 min read34

[TIL/Vite] 모노레포 process.env 이슈 해결, Pollyfill 활용

상황 정리 모노레포 프로젝트에서 어드민 앱(Vite, React.js)과 웹 앱(Next.js), React Native 모바일 앱 총 3가지 앱에서 공통으로 사용하는 types와 그 helper 들을 packages/database라는 공통 패키지로 관리하기 위해 리팩토링을 진행했습니다. 기존 코드는 ai를 적극 활용해서 만들어진 프로젝트라서, 속도감 있게 mvp 기능이 완성되었지만 QA를 진행하기 어려운 수준으로 구조가 망가져 있었거든요. ...

Dec 15, 20252 min read11

pendant-k 개발 블로그

108 posts

try { goHard(); } catch (failure) { makeOpportunity(failure); } finally { return success; }