문제 품질이냐 가격이냐, 그것이 문제로다.. 진주 나들이를 온 보선이는 기념품으로 촉석루 미니어처를 사기로 했다. 촉석루는 진주성에 있는 누각이며 경상남도 유형문화재 중 하나로, 진주성의 남쪽 지휘대로 사용됨과 동시에 논개가 촉석루 앞 의암에서 순국한 것으로 알려져 유명한 곳이다. 촉석루 미니어처를 사기 위해 기념품 가게에 들른 보선이는 놀라움을 금치 못했다. 왜냐하면, 가게에는 각양각색의 촉석루 미니어처가 진열되어 있었기 때문이다. 그리고 모든 촉석루 미니어처는 장인이 한 땀 한 땀 심혈을 기울여서 만들어서 그런지 품질과 가격이 천차만별이었고, 품질과 가격이 전부 동일한 두 촉석루 미니어처는 없었다. 각양각색의 촉석루 미니어처를 본 보선이는 물욕이 폭발할 뻔했지만 가까스로 마음을 진정시키고, 촉석루 미..
문제 RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다. 집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자. 1번 집의 색은 2번 집의 색과 같지 않아야 한다. N번 집의 색은 N-1번 집의 색과 같지 않아야 한다. i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다. 입력 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 ..
문제 다음 소스는 N번째 피보나치 수를 구하는 C++ 함수이다. int fibonacci(int n) { if (n == 0) { printf("0"); return 0; } else if (n == 1) { printf("1"); return 1; } else { return fibonacci(n‐1) + fibonacci(n‐2); } } fibonacci(3)을 호출하면 다음과 같은 일이 일어난다. fibonacci(3)은 fibonacci(2)와 fibonacci(1) (첫 번째 호출)을 호출한다. fibonacci(2)는 fibonacci(1) (두 번째 호출)과 fibonacci(0)을 호출한다. 두 번째 호출한 fibonacci(1)은 1을 출력하고 1을 리턴한다. fibonacci(0)은 ..
문제 보드게임컵》을 준비하다 지친 은하는 보드게임컵 참가자들을 경기장에 몰아넣고 결투를 시키는 게임 《수 나누기 게임》을 만들었습니다. 《수 나누기 게임》의 규칙은 다음과 같습니다. 게임을 시작하기 전 각 플레이어는 1부터 1 000 000 사이의 수가 적힌 서로 다른 카드를 잘 섞은 뒤 한 장씩 나눠 가집니다. 매 턴마다 플레이어는 다른 플레이어와 한 번씩 결투를 합니다. 결투는 서로의 카드를 보여주는 방식으로 진행되며, 플레이어의 카드에 적힌 수로 다른 플레이어의 카드에 적힌 수를 나눴을 때, 나머지가 0이면 승리합니다. 플레이어의 카드에 적힌 수가 다른 플레이어의 카드에 적힌 수로 나누어 떨어지면 패배합니다. 둘 다 아니라면 무승부입니다. 승리한 플레이어는 1점을 획득하고, 패배한 플레이어는 1점을..
Queue란? FIFO(Frist In Frist Out)로 선입선출 구조이다. 먼저 들어간 자료가 먼저 나오는 구조. 실생활에서 복사기 대기 문서, 식당 줄 서서 기다리기를 생각해보면 이해하기 쉽다. add와 offer의 차이는? 레퍼런스를 보면 이렇게 적혀있다. add : 큐에 값을 넣는 메서드. 성공적으로 넣으면 true를 반환. 큐의 공간이 없을 경우 IllegalStateException을 발생시킨다. offer : 큐에 값을 넣는 메서드. 성공적으로 넣으면 true를 반환. 넣지 못하면 false를 반환. poll과 remove의 차이는? remove : 큐에서 값을 빼서 반환. 큐가 비어있을 경우 NoSuchElementException을 발생시킨다. poll : 큐에서 값을 빼서 반환. 큐..
문제 You are climbing a staircase. It takes n steps to reach the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? 제한사항 1 (1칸 + 1칸) + (2칸) n = 3 -> (1칸 + 1칸 + 1칸) + (2칸 + 1칸) + (1칸 + 2칸) 여기까지 봤을 때 1칸과 2칸은 선택의 여지가 없지만 3칸부터는 선택을 할 수 있다. n이 3일 때 2칸이 남아 있다면 현재 1칸을 올라온 것이고, 1칸이 남아있다면 현재 2칸을 올라온 것이 된다. 그러므로 1칸일 때 올라 갈 수 있는 방법 + 2칸일 때 올라갈 수 있는 방법, 즉 [i ..