오늘도~ 나는~ 존버를 한다네~~
41장. 연속된 자연수의 합
입력으로 양의 정수 N이 입력되면 2개 이상의 연속된 자연수의 합으로 정수 N을 표현하는 방법의 가짓수를 출력하는 프로그램을 작성하세요.
만약 N=15이면 7+8 = 15 4 + 5 + 6 = 15 1 + 2 + 3 + 4 + 5 = 15 와 같이 총 3가지의 경우가 존재한다.
입력
첫 번째 줄에 양의 정수 N(7<=N < 1000)이 주어진다.
출력
첫 줄부터 각각의 경우의 수를 출력한다. 맨 마지막 줄에 총 개수를 출력한다.
1 |
|
나… 삼중포문 씀… (ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ) 이래도 되는건가….
42장. 이분 검색
아나 이래서.. 클라우드를 쓰나보다 코드 작성한거 없어짐~~ 이런~
임의의 N개의 숫자가 입력으로 주어진다. N개의 수를 오름차순으로 정렬한 다음 N개의 수 중 한개의 수인 M이 주어지면 이분검색으로 M이 정렬된 상태에서 몇 번째에 있는지 구하는 프로그램을 작성하시오.
입력
첫 줄에 한 줄에 자연수 N(3<=N<=1,000,000)과 M이 주어진다. 두 번째 줄에 N개의 수가 공백을 사이에 두고 주어진다.
출력
첫 줄에 정렬 후 M의 값의 위치 번호를 출력한다.
1 |
|
이거는 기억이 남!! 정렬하는 것이 포인트~
43. 뮤직비디오(이분검색 응용)
DVD의 크기를 최소로 하게 만드는 방법은?
입력
첫째 줄에 자연수 N, M이 주어진다. 다음 줄에는 부른 순서대로 부른 곡의 길이가 분 단위로 주어진다. 부른 곡의 길이는 10000분을 넘지 않는다.
출력
첫 번째 줄부터 DVD의 최소 용량 크기를 출력하시오.
1 |
|
모르겠숨.. 먼가 이분검색을 대충 이렇게 이용하면 되겠다~ 싶은건 있는데 그걸 코드로 구현을 못하겠네.
선생님 코드
1 |
|
훨씬 가시적이고 쉽게 쓰셨다!!
키 포인트를 적자면
- 전역변수 - 배열과 갯수를 전역변수로 선언함. 그래서 함수 쓸 때도 따로 받을 필요 없게끔 함.
while(lt <= rt)
이거를 해주면 따로 break를 쓸 필요가 없다.- 생각의 전환 - 입력받은 배열에서 값을 찾으려고 했었는데, 그게 아니라 입력받은 값들의 합에서 중간값을 찾아 나가면 되는 거였다.
44장. 마구간 정하기 (이분검색 응용)
N개의 마구간이 1차원 수직선상에 있다. 각 마구간은 x1, x2, x3, …., xN의 좌표를 가지며 마구간간에 좌표가 중복되는 일은 없다.
현수는 C마리의 말을 가지고 있는데 이 말들은 서로 가까이 있는 것을 좋아하지 않는다. 각 마구간에는 한 마리의 말만 넣을 수 있고, 가장 가까운 두 말의 거리가 최대가 되게 말을 마구간에 배치하고 싶다. C마리의 말을 N개의 마구간에 배치했을 때 가장 가까운 두 말의 거리가 최대가 되는 그 최대 값을 출력하는 프로그램을 작성하세요.
입력
첫 줄에 자연수 N(3 <= N <= 200,000)과 C(2 <= C<= N)이 공백을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 마구간의 좌표 xi(0 <= xi <= 1,000,000,000)가 한 줄에 하나씩 주어진다.
출력
첫 줄에 가장 가까운 두 말의 최대 거리를 출력하시오
45. 공주 구하기
1 |
|
껌이군~ 하고 풀었다가 꽤 오래걸렸다 캬캬… 선생님 강의 들어야겠다.