Silver(16)
-
BOJ 25945 - 컨테이너 재배치 (Python3)
상당히 최근에 올라온 문제다. 아마 1주일도 안 되었을 것이다. 그래도 이 문제를 푸는 데 필요한 직관이 생각보다는 중요할 것 같아서 글을 쓰게 되었다. 나만 이렇게 생각했나 했는데 다들 이런 방법으로 풀더라. 그럼 본격적으로 풀이에 돌입해 보자. 문제 항구의 컨테이너 하치장 바닥에는 컨테이너를 쌓을 수 있는 칸이 일렬로 총 n개가 그려져 있고, 현재 하치장에는 총 m개의 컨테이너가 쌓여 있다. 개별 컨테이너의 높이는 모두 1로 동일하며, 각 칸에 쌓을 수 있는 컨테이너의 개수에는 제한이 없다. 즉, \(a_i\) (1 ≤ i ≤ n)가 현재 i번째 칸에 쌓여있는 컨테이너의 개수를 나타내면, \(m = \sum_{i=1}^{n}{a_i}\)의 관계가 만족된다. 현재와 같이 높이에 아무 제한이 없이 컨테이..
2022.11.13 -
BOJ 9655 - 돌 게임 (Python3)
대부분의 문제는 한 가지 이상의 풀이 방법을 가진다. 그 중 가장 최적인 방법을 골라 쓰는 것이 문제를 잘 푸는 것이다. 가장 쉬운 길이나 꼼수만 알고 있는 사람을 문제를 잘 푸는 사람이라고 하지는 않는다. 문제를 잘 푸는 사람이 되기 위해서, 9659번 문제의 열화판인 9655번 문제를 다이나믹 프로그래밍(Dynamic Programming) 기법을 이용해 푸는 방법을 같이 보도록 하겠다. 간단한 다이나믹 프로그래밍 문제도 골드에 랭크되는 만큼, 결코 몰라도 좋은 기법이 아니다. 이 참에 확실히 익혀 보도록 하자. 그럼 본격적으로 풀이에 돌입해 보자. 문제 돌 게임은 두 명이서 즐기는 재밌는 게임이다. 탁자 위에 돌 N개가 있다. 상근이와 창영이는 턴을 번갈아가면서 돌을 가져가며, 돌은 1개 또는 3개..
2022.11.12 -
BOJ 9659 - 돌 게임 5 (Python3)
프로그래밍에는 수학이 중요하다. 이건 Silver I 난이도를 가진 2688번 문제를 코드 네 줄로 풀어보면서 이미 입증한 바가 있다. 그래도, 아무리 강조해도 지나치지 않다. 프로그래밍에는 수학이 중요하다. 이번 글에서 간단한 수학으로 문제를 어떻게 단순화할 수 있는지, 그 사례를 보도록 하겠다. 수학이 아닌 오로지 프로그래밍으로만 푸는 방법은 9655번 문제를 참고하면 되겠다. 그럼 본격적으로 풀이에 돌입해 보자. 문제 돌 게임은 두 명이서 즐기는 재밌는 게임이다. 탁자 위에 돌 N개가 있다. 상근이와 창영이는 턴을 번갈아가면서 돌을 가져가며, 돌은 1개 또는 3개 가져갈 수 있다. 마지막 돌을 가져가는 사람이 게임을 이기게 된다. 두 사람이 완벽하게 게임을 했을 때, 이기는 사람을 구하는 프로그램을..
2022.11.12 -
BOJ 2688 - 줄어들지 않아 (Python3)
쉬운 문제 설명만 하면 제법 지루한 법이다. 그래서 가능하면 적어도 다섯 문제마다 한 번씩은 Silver V 이상의 난이도를 가진 문제의 풀이를 올리려고 한다. 풀이가 부족하지 않게 나도 빨리빨리 질주해야겠다. 그럼 22년 11월 10일의 마지막 포스팅, 줄어들지 않아. 무려 Silver I 난이도의 문제, 본격적으로 풀이에 돌입해 보자. 문제 어떤 숫자가 줄어들지 않는다는 것은 그 숫자의 각 자리 수보다 그 왼쪽 자리 수가 작거나 같을 때 이다. 예를 들어, 1234는 줄어들지 않는다. 줄어들지 않는 4자리 수를 예를 들어 보면 0011, 1111, 1112, 1122, 2223이 있다. 줄어들지 않는 4자리수는 총 715개가 있다. 이 문제에서는 숫자의 앞에 0(leading zero)이 있어도 된다..
2022.11.10