목록sw expert (11)
시간이 NullNull
앨리스와 토끼는 덧셈을 이용한 간단한 게임을 같이 하기로 했다. 먼저 어떤 양의 정수를 하나 정해 그 수로 게임을 시작한다. 둘은 서로의 차례에 인접한 두 자리를 선택하고, 이 두 자리를 선택된 두 숫자의 합으로 교체하여 상대에게 차례를 넘긴다. 예를 들어, “1234”의 십의 자리와 백의 자리를 선택하면 다음 차례에는 수가 “154”가 된다. “5678”의 십의 자리와 백의 자리를 선택하면 다음 차례에는 수가 “5138”이 된다. 이렇게 차례를 반복 하다가 자기 차례에 넘어온 수가 한 자리가 되면 그 사람이 패배하게 된다. 게임을 시작할 때의 정수가 주어진다. 앨리스가 먼저 차례를 가지고, 서로 최선을 다해 게임을 한다고 할 때 어떤 사람이 게임에서 승리하게 될 것인지 구하는 프로그램을 작성하라. 이 ..
프로그래밍 대회를 성공적으로 마친 은기는 사회 공헌을 위해 대회 우승자들과 농촌 봉사활동을 떠나기로 했다. 은기와 대회 우승자들은 한적한 시골 마을 어딘가에 N마리의 송아지를 키우고 있는 곳으로 갔다. 그 곳의 각 송아지에는 1번부터 N번까지의 고유번호와 1번부터 3번까지의 품종 번호가 매겨져 있었다. 은기와 대회 우승자들은 송아지들을 보고서 문득 질문이 생겼다. “고유번호 L번부터 R번까지의 송아지들에 대해서 각각의 품종은 몇 마리가 있을까?” 이들이 궁금해하는 모습을 본 당신은, 프로그램을 만들어 도와주기로 결정하였다. 질문 Q개에 대하여 각각 1번, 2번, 3번 품종의 수를 답해주는 프로그램을 작성하라. 이 문제의 경우 단순히 모든 것을 입력받고 1번부터 N번까지의 for문을 돌면서 숫자들을 세어 ..
N명의 사람들이 어떤 프로그래밍 대회에 참가했다. 대회에는 M개의 문제가 나왔다. 동철이는 이 프로그래밍 대회가 열렸다는 소식을 접했고, 간단한 웹 서핑으로 각 사람들이 문제를 풀었는지 아닌지를 나타내는 NⅹM 개의 값 ai,j를 구할 수 있었다. 사람에 1에서 N까지의 번호를 붙이고, 문제에도 1에서 M까지의 번호를 붙일 때, ai,j 는 대회가 끝나고 i번 사람이 j번 문제를 풀었다면 1, 풀지 못했다면 0을 가지는 값이다. 동철이는 이 대회에는 나가지 못했지만, 다른 프로그래밍 대회에 나갈 계획이고 목표는 우승이다. 그러므로 지금 열린 이 대회에서 1등을 한 사람들을 찾아 라이벌로 삼기로 했다. 이 대회에서 모든 문제의 점수는 같고 프로그램을 제출한 시간은 따지지 않는다. 그러므로, 푼 문제 수가 ..
문득 준홍이는 각 카드 세트에서 카드를 한 장씩 골라서 카드에 적힌 숫자를 합한 결과 중, 등장할 확률이 가장 높은 숫자는 어떤 숫자일지 궁금해졌다. 단, 카드 세트에서 어떤 카드를 선택할 확률은 모두 동일하다고 가정한다. 이를 계산하는 프로그램을 작성하라. 카드 두세트가 있고 여기서 숫자들의 합중 가장 빈도수가 많은 합을 출력한다. 단, 밑에 제약 조건으로 오름차순으로 정렬하라고 되어 있다. 이 문제의 경우 매우 간단하게 풀릴 수 있다. N, M 이 주어질 때 더 큰수를 먼저 찾는다. 예를 들어 N = 6, M= 3 일때 나올 수 있는 합은 2 ~ 9 까지의 수가 될 것이다. 이때 2는 1+1 , 9 는 3+9로 누가 봐도 제일 빈도수가 작을 것으로 예상된다. 그렇다면 이제 빈도수를 계산을 어떻게 할 ..
승현이는 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( '숫자', '진법' ) 을 하게 되면 알아서 숫자가 진법 변환되어 ..