Binary Search
-
9-9: 2차식 정답 추측Binary Search 2018. 10. 25. 21:44
2차식 정답 추측 (guess.cpp) 문제2차식 f(x) = x*x+ x 가 있고, 숫자 a가 주어진다. 우리는 f(x) = a 를 만족하는 x의 값을 찾고 싶지만, 보통 이 값은 정수로 떨어지지 않는 경우가 많다. 예를 들어, f(x) = 20 을 풀고자 한다면, x = 4이기 때문에 이는 정수이지만, f(x) = 103 을 풀고자 한다면 이는 x = 9.6612... 로써 정수가 아니다.이 문제에서는 x의 정수부분이 얼마인지를 구하는 프로그램을 작성하시오. 예를 들어, f(x) = 103 을 풀고자 한다면, x = 9.6612... 이기 때문에 정수부분은 9가 된다. 입력첫 번째 줄에 숫자 a가 주어진다. ( 1 ≤ a ≤ 100,000,000,000,000,000 ) 출력f(x) = a 를 만족하..
-
9-8: 숫자 개수 세기Binary Search 2018. 10. 25. 21:43
숫자 개수 세기 (count.cpp) 문제n개의 숫자가 주어지고, q개의 질문이 주어진다. 각각의 질문은 n개의 숫자 중에서 특정 숫자가 몇개나 있는지를 묻는다. q개의 질문에 모두 답하는 프로그램을 작성하시오. 입력첫 번째 줄에 숫자의 개수 n, 그리고 질문의 개수 q가 주어진다 ( 1 ≤ n ≤ 100,000, 1 ≤ q ≤ 100,000) 두 번째 줄에 n개의 숫자가 주어진다. 세 번째 줄에 q개의 질문이 주어진다. 출력각 질문에 대하여 숫자의 개수를 한 줄에 하나씩 출력한다. 예제 입력10 4 1 3 4 3 2 3 1 2 5 10 1 3 9 10예제 출력2 3 0 1 import java.io.BufferedReader; import java.io.IOException; import java.io..
-
9-7: 구간의 합집합Binary Search 2018. 10. 25. 21:43
구간의 합집합 (union.cpp) 문제구간은 [s, e] 로 나타내고, 이 의미는 s, (s+1), (s+2), …, (e-1), e 와 같이 숫자를 나열한 것을 의미한다. 예를 들어, [1, 4]는 1, 2, 3, 4로 숫자를 나열한 것을 의미한다. n개의 구간이 있고, 이 구간들의 숫자를 모두다 새로운 배열 S에 넣어 정렬을 한다. 이 때 S[i] 의 값이 무엇인지 출력하는 프로그램을 작성하시오. 예를 들어, 3개의 구간 [1, 3], [2, 10], [1, 8] 이 있고, S[5]를 알고싶다고 하자. 그러면 S = [1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 10] 이 되고, 따라서 S[5]는 3이 된다. 배열의 인덱스는 0부터 시작한다는..
-
9-5: 구슬상자Binary Search 2018. 10. 25. 21:39
구슬상자 (marblebox.cpp) 문제구슬 공장에서 구슬 상자를 유치원에 기증했다. 각각의 구슬은 M가지 서로 다른 색상 중 한 색상이다. 원장 선생님은 모든 구슬을 N명의 학생들에게 나누어 주려고 한다. 이 때, 구슬을 받지 못하는 학생이 있어도 된다. 하지만, 학생은 항상 같은 색상의 구슬만 가져간다.한 아이가 너무 많은 구슬을 가져가게 되면, 다른 아이들이 질투를 한다. 원장 선생님은 이런 질투심을 수치화하는데 성공했는데, 질투심은 가장 많은 구슬을 가져간 학생이 가지고 있는 구슬의 개수이다. 원장 선생님은 질투심이 최소가 되게 구슬을 나누어 주려고 한다.상자에 빨간 구슬이 4개 (RRRR), 파란 구슬이 7개 (BBBBBBB) 있었고, 이 구슬을 5명의 아이들에게 나누어 주는 경우를 생각해보자..
-
9-4: NN단표Binary Search 2018. 10. 25. 21:38
NN단표 (NNdan.cpp) 문제알랩이는 구구단표처럼 NN단표를 만들었다고 한다.NN단표는 2차원 배열의 모양으로 곱셈 1단부터 N단까지의 값들을 적어놓은 형태이다.NN단표의 배열을 A라고 했을 때, 배열의 들어가는 수 A[i][j]=i*j이다.(즉, 4행 7열에는 28, 7행 5열에는 35가 들어가 있다.)알랩이는 N단까지 나온 숫자들 중에서 K번째로 작은 수를 찾고 싶어한다.이때, 중복되는 여러 수들을 고려한다. 즉 N*N개의 모든 수들 중에서 K번째 수를 구하는 것이다. 입력첫째 줄에 배열의 크기 N이 주어진다. N은 100,000보다 작거나 같은 자연수이다. 둘째 줄에 K가 주어진다. K는 N*N보다 작거나 같고, 10,000,000,000보다 작거나 같은 자연수이다. 출력K번째 원소를 출력한다..
-
9-2: 올라가는 달팽이Binary Search 2018. 10. 25. 21:37
올라가는 달팽이 (snail.cpp) 문제땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. 입력첫째 줄에 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) 출력첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다. 예제 입력2 1 5예제 출력4import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt..
-
8-1: 숫자박스Binary Search 2018. 10. 25. 21:25
숫자박스 (numberbox.cpp) 문제숫자박스에는 자연수들이 적혀있는 종이들이 N장 들어있다. 숫자 M개가 주어졌을 때, 이 숫자가 적혀있는 숫자가 상자 안에 있는지 아닌지를 구하는 프로그램을 작성하시오. 입력첫째 줄에 윤성이가 가지고 있는 숫자 정보의 개수 N (1 ≤ N ≤ 300,000)이가 주어진다. 둘째 줄에는 숫자 정보들이 주어진다. 숫자는 1,000,000이하의 정수이다. 두 숫자 카드에 같은 숫자가 적혀있는 경우는 없다.셋째 줄에는 M (1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 윤성이가 숫자 박스에 있는지 아닌지를 구해야 할 M개의 숫자가 주어지며, 이 숫자는 공백으로 구분되어져 있다. 이숫자도 1,000,000이하의 정수이다. 출력첫째 줄에 입력으로 주어진 M개의 숫자에..