목록전체 글 (44)
시간이 NullNull
승현이는 N(2 ≤ N ≤ 10) 진법의 수 X(1 ≤ X ≤ N^10,000,000) 를 공책에 적었다. 승현이는 손이 점점 아프기 시작했고, 머릿속에서 문득 X를 (N-1)로 나눈 나머지가 궁금해졌다. 승현이를 도와 N진법의 수 X가 주어졌을 때에 X를 (N-1)로 나눈 나머지를 계산하는 프로그램을 작성하라. 예를 들면, 9진법의 수 234는 10진법으로 193이고, 8로 나눈 나머지는 1이 된다. 이 문제에서 정말 편하게 생각하면 주어진 수를 10진법으로 바꾸고 (N-1)을 % 연산하면 나머지가 구해지지 않나? 라고 생각할 수 있지만 N이 10,000,000이라는 것에 주목해야 한다. java의 경우 Integer.parseInt( '숫자', '진법' ) 을 하게 되면 알아서 숫자가 진법 변환되어 ..
고슴도치는 물이 찰 예정인 칸으로 이동할 수 없다. 즉, 다음 시간에 물이 찰 예정인 칸으로 고슴도치는 이동할 수 없다. 이동할 수 있으면 고슴도치가 물에 빠지기 때문이다. 이 문제의 포인트는 위의 문장이라고 생각이 들었다. 그렇다면 같은 시간에는 물이 먼저 이동하고 그 뒤에 고슴도치가 이동한다고 다르게 생각할 수도 있다고 생각하였고 물이 먼저 움직인 후에 고슴도치가 움직이면 되겠다고 생각하였다. 1. 한 사이클당 물이 한번 번진다.2. 한 사이클당 고슴도치가 한번 움직인다.2-1. 고슴도치가 못 움직이게 되면( 빠지는 경우 포함 ) 더이상 Queue에 다시 넣을 노드가 사라지게 됨으로 종료3. 도착하면 그때 몇 사이클 움직이게 되었는지 파악하여 결과값 출력 물의 좌표와 고슴도치의 좌표를 각각 Queue..
N이 주어질 때, 두 사람이 최선을 다해 게임을 한다면 어떤 사람이 이기게 되는지 출력하는 프로그램을 작성하라. 이 문제에서 가장 힘들었던 점이 최선을 다해 게임을 한다면 이었다. 처음에 모든 경우를 종이에 적어 구해보았는데 숫자가 작은 수부터 시작한다면 경우의 수가 너무 많아지고 계산식이 복잡해 지는 것을 확인하고 역으로 N부터 시작해보았다. 예를 들어 N이 100일때 1. 내가 이기기 위해서는 다음 사람이 무조건 100 "초과" 하는 숫자를 부르게 해야함으로 내가 51 을 부르면 다음 사람은 최소 102를 부르게 되므로 무조건 이길 수 있다. 2. 반대로 그렇다면 나의 상대는 내가 51을 부를 수 없도록 24라는 숫자를 불러 내가 최대 49의 숫자를 부를 수 밖에 없게 만든다. 이 두가지를 반복하게 ..