코딩테스트 챌린지

[코딩테스트 챌린지] 백준 1568 덩치 (java)

zincah 2024. 9. 15. 20:31
반응형

문제

https://www.acmicpc.net/problem/7568

문제 탐색하기

1. 문제의 조건에 맞게 코드 구현하기

N명의 키와 몸무게를 입력받아 덩치의 순위를 매기는 프로그램을 구현하는 문제입니다.

몸무게와 키가 모두 크지 않으면 덩치가 크다고 할 수 없다는 조건을 생각해보면 입력받은 사람의 덩치 등수를 매길 수 있습니다.

 

loop를 돌기전에 덩치 순위 변수를 1로 선언합니다.

현재 지정된 사람의 몸무게와 키가 비교하는 사람보다 모두 작을때만 순위를 +1 하게되므로 서로 비교했을 때 덩치의 순위를 매길 수 없는 사람들을 동일한 등수로 유지시킬 수 있습니다.

 

코드 설계하기

  1. 덩치 등수를 비교할 사람의 수 입력
  2. 2차원 배열 입력
  3. 순위를 지정할 rank 변수를 1로 선언
  4. 다음 배열의 값 보다 현재 배열의 값이 모두 작을 때 순위 변수의 값을 +1 한다ㅣ.
  5. 출력한 뒤 rank 변수를 다시 1로 초기화한다.

 

정답 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class TheBody {

    public static void main(String[] args) throws IOException {

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        // 1. 덩치 등수를 비교할 사람의 수를 입력
        int N = Integer.parseInt(reader.readLine());

        int[][] a = new int[N][2];

        // 2. 2차원 배열 입력
        StringTokenizer st;
        for(int i=0; i<N; i++){
            st = new StringTokenizer(reader.readLine());

            int[] b = new int[2];
            b[0] = Integer.parseInt(st.nextToken());
            b[1] = Integer.parseInt(st.nextToken());

            a[i] = b;
        }

        // 3. 순위를 저장할 변수 선언
        int rank = 1;
        for(int i=0; i<N; i++){
            for(int j=0; j<N; j++){
                if(i == j) continue;

                // 4. 다음 배열의 값보다 현재 배열의 값이 모두 작을때 순위를 올린다.
                if(a[i][0] < a[j][0] && a[i][1] < a[j][1]){
                    rank++;
                }
            }
            System.out.print(rank + " "); // 5. 출력
            rank = 1; // 6. 순위를 초기화한다.
        }

    }
}
반응형