본문 바로가기

전체 글110

[C++] 설탕 배달 : 2839번 문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다. 상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오. 문제 해석 3키로와 5키로를 합하여 입력받은 N 을 만드는 3키로와 5키로의 합의 최소 갯수를 구하면 된다. 조건으로는, .. 2022. 7. 4.
[C++] 부녀회장이 될테야 : 2775번 문제 평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다. 이 아파트에 거주를 하려면 조건이 있는데, “a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다” 는 계약 조항을 꼭 지키고 들어와야 한다. 아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다. 문제 해석 3 층 1 5 15 35 2 층 1 4 10 20 1 층 1 3 6 10 0 층 1 2 3 4 이.. 2022. 7. 4.
[C++] ACM 호텔 : 10250번 문제 H = 6 이고 W = 12 인 H × W 호텔을 간략하게 나타낸 그림 방 번호는 YXX 나 YYXX 형태인데 여기서 Y 나 YY 는 층 수를 나타내고 XX 는 엘리베이터에서부터 세었을 때의 번호를 나타낸다. 즉, 그림 1 에서 빗금으로 표시한 방은 305 호가 된다. 손님은 엘리베이터를 타고 이동하는 거리는 신경 쓰지 않는다. 다만 걷는 거리가 같을 때에는 아래층의 방을 더 선호한다. 예를 들면 102 호 방보다는 301 호 방을 더 선호하는데, 102 호는 거리 2 만큼 걸어야 하지만 301 호는 거리 1 만큼만 걸으면 되기 때문이다. 같은 이유로 102 호보다 2101 호를 더 선호한다. 여러분이 작성할 프로그램은 초기에 모든 방이 비어있다고 가정하에 이 정책에 따라 N 번째로 도착한 손님에게.. 2022. 7. 4.
[C++] 달팽이는 올라가고 싶다 : 2869번 문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. 문제 해석 높이가 V 인 나무가 있고 낮에 A만큼 올라가고, 밤에 B만큼 내려간다. 단, 낮에 V에 도달하면 날짜를 세지 않고 종료한다. 예를 들어 높이가 5인 나무를 낮에 2, 밤에 1 이라고 할 때, 1일차 위치 : 1 2일차 위치 : 2 3일차 위치 : 3 4일차 낮의 위치 : 5 풀이 밤에는 거리가 감소하므로, 밤에는 목적지에 도착할 수가 없다. 낮에만 도착이 가능한데, 나무 V 를 하루 이동.. 2022. 7. 4.
[C++] 분수 찾기 : 1193번 문제 무한히 큰 배열에 다음과 같이 분수들이 적혀있다. 이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자. X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오. 문제 해석 지그재그로 진행되는 분수 배열에서 일정한 규칙을 찾아 X번째 분수가 무엇인지 출력하는 문제이다. 개인적인 해석은 이렇다. 분자와 분모를 따로 따로 구해서 접근해야 한다고 생각했고, 각 분자, 분모는 일정한 규칙을 가지고 있다고 생각했다. 또 문제에서 알 수 있는 건, 지그재그로 진행되는 방(층)은 1, 2, 3, 4, 5... 의 형태로 1씩 증가 중이며, 방(층)의 값은 각 방(층)의 분자/분모 중 최대.. 2022. 7. 4.
[C++] 벌집 : 2292번 문제 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다. 문제 해석 벌집은 1부터 시작하여 시계방향으로 회전하며 1개의 껍질(층)을 생성하며 무한대로 생성된다. 각 껍질(층)의 최대값은 1층부터 { 1, 7, 19, 37, 61 … } 의 값을 가진다. 각 층의 최대값은 { 6, 12, 18, 24 ... } 로 공차가 6인 등차수열을 이룬다. 또한, 각 층에.. 2022. 7. 4.