Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- CSTS 폭포수 모델
- 한국투자증권 양도세 신고
- katalon
- katalon 사용법
- bfs 미로탐색 java
- 테스트 자동화
- 피보나치 예제
- katalon xpath
- 한국투자증권 해외주식 양도세
- 해외증권 양도세 한국투자증권
- 주식 양도세 신고방법
- 피보나치함수 예제
- oracle group by
- 재귀 예제
- 피보나치함수
- katalon 자동화
- 최대공약수 예제
- katalon 비교
- 톰캣 실시간 로그
- 해외주식 양도세 신고
- Katalon Recorder 사용법
- git 연동
- js 자동완성
- recursion example
- tomcat log
- java.sql.SQLSyntaxErrorException
- 국세청 해외주식 양도세 신고방식
- javascript 자동완성
- 홈택스 해외주식 양도세
- 재귀함수 예제
Archives
- Today
- Total
엄지월드
백준 14729 칠무해 본문
설명
처음에 간단하게 PriorityQueue를 통해서 풀려고 했는데 메모리초과가 발생했다.
문제의 메모리제한은 256MB인데, 원인을 찾아보니 PriorityQueue는 메모리를 많이 사용한다고 한다.
그래서 방법을 찾던중 아래와 같이 접근해서 처리했다.
1. 8개까지 입력을 받는다.
2. 8개를 sort한다.
3. 다음 숫자가 들어오면 index 0번부터 비교를 한다.
4. 자기보다 큰 숫자가 있으면 해당 위치에 넣기 위해 모두 오른쪽으로 1칸 옮긴다.
5. 해당 index에 본인의 수를 기입한다.
반례
# 첫번째 반례
10
100.000
100.000
100.000
100.000
100.000
100.000
50.000
0.000
50.000
0.000
# 두번째 반례
9
2
4
5
6
7
8
9
3
1
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
// 14729
public static void main(String[] args) throws IOException {
process();
}
private static void process() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
double[] arr = new double[9]; // 8 보다 1 더 큰 9로 선언
for (int i = 0; i < 8; i++) {
arr[i] = Double.parseDouble(br.readLine());
}
Arrays.fill(arr, 8, arr.length, 9999);
Arrays.sort(arr);
for (int i = 0; i < N-8; i++) {
double d = Double.parseDouble(br.readLine());
// 앞에서부터 순회
for (int j = 0; j < 7; j++) {
if(arr[j] >= d) {
// 한칸씩 뒤로 미룸
for (int k = 7; k >= j; k--) {
arr[k+1] = arr[k];
}
arr[j] = d;
break;
}
}
}
// 포맷에 맞게 출력
for(int i = 0; i < 7; i++) {
bw.write(String.format("%.3f", arr[i]) + "\n");
}
bw.flush();
bw.close();
br.close();
}
}
'알고리즘' 카테고리의 다른 글
백준 11536 줄 세우기 (0) | 2024.08.06 |
---|---|
백준 15312 이름궁합 (0) | 2024.08.05 |
백준 1817 짐 챙기는 숌 (0) | 2024.07.31 |
백준 5648 역원소 정렬 (0) | 2024.07.30 |
백준 6550 부분 문자열 (0) | 2024.07.29 |
Comments