본문 바로가기

728x90

전체 글

(24)
BOJ 1321 군인 문제 캠프 내내 그랬듯이, 여전히 옆 나라와의 전쟁이 한창이다. 전쟁에는 N개의 부대가 투입되었는데, 전쟁이 장기전이 되다 보니 군사의 적절한 배치를 위해 각 부대에 군인이 늘어나기도 하고 줄어들기도 하고 있다. 행정의 편의를 위해 각 군인들에겐 번호가 붙어 있는데, 군인들은 1번 부대부터 군번순서대로 차례차례 배치된다. 예를 들어 1번 부대에 4명, 2번 부대에 3명, 3번 부대에 7명의 군인이 있다면 군번이 6번인 군인은 2번 부대에 배치되게 된다. 문제는 어떤 부대의 인원이 늘어나거나 줄어들었을 때 i번 군인이 어디에 배치되는지 인데, 이럴 때에는 군인도 군번도 처음부터 다시 배치하게 된다. 위의 예에서와 같이 1번 부대에 4명, 2번 부대에 3명, 3번 부대에 7명의 군인이 있었는데, 1번 부대에..
BOJ 1849 순열 문제 1부터 N까지의 수들이 한 번씩 쓰인 수열이 있다. 그 수열에서 i 앞에 있는 수 들 중, i보다 큰 수들의 개수를 A[i]라고 정의하자. A[i]가 주어져 있을 때, 원래 수열을 구하는 프로그램을 작성하여라. 입력 첫째 줄에 수열 원소의 개수 (1 ≤ N ≤100,000)이 주어진다. 그리고 두 번째 줄부터 N+1 번째 줄까지 차례로 A[i]가 주어진다. 출력 N개의 줄에 걸쳐서 수열을 출력한다. (i번째 줄에는 i번째 원소를 의미한다) 예제 입력 1 8 5 0 1 2 1 2 0 0 예제 출력 1 2 7 3 5 4 1 8 6 풀이 이 문제는 세그먼트 트리와 파라매트릭 바이너리 서치를 이용한 문제이다. 원래 수열을 구하려면 맨 앞에서부터 하나하나 찾는 방법으로 원래 수열을 구할 수 있다. 우선 길이..
BOJ 1071 소트 문제 N개의 정수가 주어지면, 이것을 연속된 두 수가 연속된 값이 아니게 정렬(A[i] + 1 ≠ A[i+1])하는 프로그램을 작성하시오. 가능한 것이 여러 가지라면 사전순으로 가장 앞서는 것을 출력한다. 입력 첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 N개의 수가 주어진다. N개의 수는 1,000보다 작거나 같은 자연수 또는 0이다. 출력 첫째 줄에 문제의 정답을 출력한다. 예제 입력 1 3 1 2 3 예제 출력 1 1 3 2 예제 입력 2 9 1 1 1 1 2 2 2 2 2 예제 출력 2 2 2 2 2 2 1 1 1 1 풀이 이 문제는 재귀함수를 사용해 쉽게 풀 수 있다. 우선 N개 수 중 P개의 수를 배열했다고 할 때, 나머지를 배열하는 방법은 P+1번째 수에 쓸..

728x90