본문 바로가기
728x90
반응형

알고리즘/수학 퍼즐5

[수학 퍼즐 / java] 06.콜라츠 추측 안녕하세요. 이번 포스팅은 프로그래머의 뇌를 단련하는 수학퍼즐 6번문제인 콜라츠 추측을 풀어보겠습니다 지금까지 미결로 남아 있는 수학 문제 중에 콜라츠 추측(Collatz Conjecture)이 있다. ​ 자연수 n에 대하여 ​ - n이 짝수인 경우, n을 2로 나눈다. ​ - n이 홀수인 경우, n에 3을 곱해 1을 더한다. ​ 이 계산을 반복하면 초깃값이 어떤 수였더라도 반드시 1에 도달한다. ​ (1 → 4 → 2 → 1과 같이 반복) ​ ​ ​ 이 내용을 조금 바꾸어 초깃값이 짝수면 맨 처음에만 n에 3을 곱하여 1을 더하는 것에서 시작하기로 하고 '맨 처음의 수'로 돌아가는 법을 생각해본다. ​ ​ ​ 예를 들어 2로 시작하는 경우에는 다음과 같다 ​ 2 → 7 → 22 →11 → 34 → 17.. 2021. 3. 23.
[수학 퍼즐 / java] 05. 아직도 현금으로 계산하다니! 안녕하세요. 이번 포스팅은 프로그래머의 뇌를 단련하는 수학퍼즐 5번문제인 아직도 현금으로 계산하다니! 를 풀어보겠습니다 요즘에는 지하철이건 버스건 전자 화폐가 당연시 된다. 하지만, 아직도 현금으로 계산하는 사람도 있다. ​ 이번에는 현금으로 내는 사사람을 위한 동전 교환기를 떠올려 보자. 이 기계는 10원, 50원, 100원, 500원 동전으로 섞어서 교환할 수 있고 모든 동전은 충분한 개수가 마련되어 있다고 가정한다. ​ 문제 1,000원 지폐를 넣었을 때 나오는 동전의 조합이 몇 가지인지 구해보시오. 동전의 순서는 무시한다. package changePaperToCoin; import java.util.Scanner; public class ChangePaperToCoin { public stati.. 2021. 3. 23.
[수학 퍼즐 / java] 04. 막대 자르기 안녕하세요. 이번 포스팅은 프로그래머의 뇌를 단련하는 수학퍼즐 4번문제인 막대 자르기 를 풀어보겠습니다 길이 n[cm]의 한 막대를 1[cm] 단위로 자른다고 생각해 본다. 단, 하나의 막대는 한 번에 한 사람만이 자를 수 있다. 잘린 막대가 3개가 되면, 동시에 3명이 자를 수 있다. ​ 최대 m명이 있을 때 막대를 자르는 최소 횟수를 구해 보시오. ​ 예를 들어 n = 8, m = 3일 총 4번 자를 수 있다. ​ ​ ​ 문제 1 n = 20, m = 3일 때의 횟수를 구해 보아라. ​ ​ 문제 2 n = 100, m = 5일 때의 횟수를 구해 보아라. package cutBar; import java.util.Scanner; public class CutBar { public static void .. 2021. 3. 23.
[수학퍼즐 / java] 03.카드를 뒤집어라! 안녕하세요. 이번 포스팅은 프로그래머의 뇌를 단련하는 수학퍼즐 3번문제인 카드를 뒤집어라! 를 풀어보겠습니다 1~100의 번호가 쓰인 100장의 카드가 순서대로 나열되어 있다. ​ 모든 카드는 뒷면이 위를 향한 상태로 놓여 있다. ​ 한 사람이 2번 카드부터 1장 간격으로 카드를 뒤집어 나간다. ​ 그러면 2, 4, 6, ... , 100번 카드의 앞면이 나타나게 된다. ​ 그 다음으로, 다른 사람이 3번 카드부터 2장 간격으로 카드를 뒤집어 나간다( 뒷면이 위를 향한 카드는 앞면이 보이게 되고 앞면이 위를 향한 카드는 뒷면이 보이게 된다.) ​ 다시 다른 사람이 4번 카드부터 3장 간격으로 카드를 뒤집어 나간다. ​ 이렇게 n번째의 카드부터 n-1장 간격으로 카드를 뒤집는 작업을 뒤집을 카드가 더는 없.. 2021. 3. 23.
[수학 퍼즐 / java] 01.앞뒤가 같은 10진수 만들기 안녕하세요. 이 카테고리의 게시글은 프로그래머의 뇌를 단련하는 수학퍼즐 책을 풀어볼 겁니다. 첫번째 문제부터 가보겠습니다. 앞뒤가 같아 거꾸로 읽어도 같은 수를 '대칭수' 또는 '거울수'라고 한다. ​ 예를 들면 '123454321'과 같은 수를 의미한다. ​ 문제 ​ 10진수, 2진수, 8진수 그 어느 것으로 표현하여도 대칭수가 되는 수 중, 10진수에서 10이상인 최솟값을 구해보시오. ​ ​ 예) 9 (10진수) = 1001(2진수) = 11(8진수) ​ ※ 위의 예시는 10진수에서 10미만이므로 제외 package equalFtoB; public class EqaulFtoB { public static void main(String[] args) { int init = 10; String binSt.. 2021. 3. 23.
728x90
반응형