728x90
반응형
https://www.acmicpc.net/problem/23246
풀이
분류로는 정렬이라고 되어있지만, 정렬없이도 가능합니다.
0번째에 번호 1~3번째에 순위를 입력받습니다.
while문을 돌면서 number의 값을 1부터 계속해서 증가시킵니다.(값이 낮은게 1순위가 되므로)
number과 1~3순위를 곱한값이 같으면 answer에 값을 넣어줍니다.
다시 한번 값이 같은 순간이 오면 answer이 0이 아니므로 두번째 규칙(합이 작은 값을 넣어줌)을 따른 후 이에 해당하지 않으면 3번째 규칙(번호가 낮은 값을 넣어줌)을 입력받습니다.
※ answer이 0이 아닌경우 체크할때는 다음에 그 번호를 다시 체크해서 넣어줘야 합니다.
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[][] num = new int[n][4];
for(int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for(int j = 0; j < 4; j++) {
num[i][j] = Integer.parseInt(st.nextToken());
}
}
int count = 0, number = 1;
StringBuilder sb = new StringBuilder();
while(true) {
int answer = 0, w = 0;
boolean flag = false;
for(int i = 0; i < n; i++) {
int check = num[i][1] * num[i][2] * num[i][3];
if(check == number && num[i][0] != 0) {
int sum = num[w][1] + num[w][2] + num[w][3];
if(answer == 0) {
answer = num[i][0];
w = i;
}
else {
int sumi = num[i][1] + num[i][2] + num[i][3];
flag = true;
if(sumi < sum) {
answer = num[i][0];
w = i;
}
else if(sumi == sum && answer > num[i][0]){
answer = num[i][0];
w = i;
}
}
}
}
if(answer != 0) {
num[w][0] = 0;
sb.append(answer).append(" ");
count++;
}
if(count == 3) {
break;
}
if(!flag) {
number++;
}
}
System.out.print(sb);
}
}
728x90
반응형
'백준 > 20001 - 25000' 카테고리의 다른 글
[백준] 23207번 : Preludes(JAVA) (0) | 2021.10.13 |
---|---|
[백준] 23235번 : The Fastest Sorting Algorithm In The World(JAVA) (0) | 2021.10.12 |
[백준] 23080번 : 스키테일 암호(JAVA) (0) | 2021.10.03 |
[백준] 22999번 : K-Goodness String(JAVA) (0) | 2021.09.01 |
[백준] 22966번 : 가장 쉬운 문제를 찾는 문제(JAVA) (0) | 2021.08.20 |
댓글