https://www.acmicpc.net/problem/7568
7568번: 덩치
우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩
www.acmicpc.net
문제
문제는 위와 같다.
사람 수 N과 N명의 몸무게와 키를 입력받고 덩치(키 and 몸무게)를 비교하여 덩치 등수를 매긴다.
비교 시에 "단락회로 평가"를 사용하면 더욱 빠를 거 같아서 응용하여 써보았다.
문제풀이
사람 당 몸무게와 키를 입력받아야 하므로 2차원 배열을 사용하여 풀이를 해보았다.
① 사람 수 N만큼 "2행 N열"짜리 2차원 배열을 생성한다
② 0번째 행엔 몸무게를, 1번째 행엔 키를 저장한다.
③ 1번째 사람부터 N번째사람까지 모든 사람과 키와 몸무게를 비교하여 등수를 매긴다.(단락회로 평가)
* 등수 = 자신보다 키와 몸무게 모두 큰 사람의 수 + 1
④ 0번째부터 N번째까지의 등수를 공백단위로 출력한다.
단락회로 평가?
Q. 단락회로 평가란?
A. 논리 연산자 (&&, ||)를 사용하여 연산을 진행 할 때 좌측 식의 값에 따라 우측 식의 실행 여부를 판단하는 동작
이 문제에선 덩치를 비교할때에 기준이 "자신보다 몸무게와 키가 모두 더 큰 사람"이기 때문에, 비교시에 논리 연산자 "&&"을 사용하면 좌측 식의 값(몸무게 비교값)에 따라 우측 식의 값(키 비교값)의 실행 여부가 동작되게 된다.
이를 통해 더욱 간결하고, 효율적인 연산이 가능하다.
사실 평소에 익숙하게 사용하는 연산자이고, 기본적인 상식처럼 알고는 있었겠지만
이를 분명히 인지하고, 그 효과를 의도하여 사용하는 것은 다른 차원의 얘기이기 때문에, 이를 인지한 채로 사용하고자 단락회로 평가를 강조하였다.
해결코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Scanner;
import java.util.StringTokenizer;
public class BJ7568 {
public static void main(String[] args) throws NumberFormatException, 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()); /* 사람 수 */
int[][] array = new int[2][N];
/* 사람 수만큼 키와 몸무게 할당 반복 */
for(int i=0; i<N; i++) {
StringTokenizer st2 = new StringTokenizer(br.readLine());
array[0][i] = Integer.parseInt(st2.nextToken()); /* 몸무게 */
array[1][i] = Integer.parseInt(st2.nextToken()); /* 키 */
}
/* 자신보다 더 큰 덩치의 사람 수 count */
for(int i=0; i<N; i++) {
int cnt = 1;
for(int j=0; j<N; j++) {
/* 자기 자신은 비교하지 않는다 */
if(i == j)
continue;
if(array[0][i] < array[0][j] && array[1][i] < array[1][j]) {
cnt++;
}
}
bw.write(String.valueOf(cnt + " "));
}
bw.close();
}
}
'Algorithm > Solution' 카테고리의 다른 글
[BaekJoon] 백준 2864번 5와 6의 차이(Java) (1) | 2022.09.24 |
---|---|
[BaekJoon] 백준 20364번 부동산다툼(Java) (1) | 2022.09.09 |
[BaekJoon] 백준 2839번 설탕배달(Java) (0) | 2022.07.22 |