자료구조&알고리즘/백준

[JAVA] 7568번 - 덩치

celinayk 2024. 8. 11. 23:49
반응형

문제 탐색하기

- 문제에서 구해야 하는 최종 정답은 무엇인지 탐색한 과정
- 그 정답을 구하기 위해 어떻게 코드를 구현해야 할지 고민한 과정
- 문제에 들어오는 범위를 파악하여 어떤 알고리즘을 쓸 수 있을지 고민해 가는 과정

 

1. 덩치와, 키와 둘다 커야 나보다 큰 사람이 될 수 있다.

2. 덩치와, 키 둘 중에 하나라도 나보다 작으면 그냥 나랑 등수가 같다고 보면된다

3. 덩치와, 키 둘다 작으면 나보다 작은 사람이다

 

학생 N명의 모든 경우의 수를 구해야한다

 

이차원 배열을 사용해서 몸무게, 키를 입력받는다. 

그리고 등수를 입력받을 일차원 배열도 필요하다.

 

이차원배열을 돌면서 

몸무게, 키를 비교해서 모두 자신보다 큰게 있으면 1을 더해준다

 

 

코드 설계하기

위의 문제 탐색하기에서 고민한 과정을 토대로 문제 풀이에 대한 실마리를 잡았다면, 문제 풀이를 본격적으로 하기전, 문제를 풀이 위한 로드맵을 그려본다
어떤 순서로 코드를 작성해야 할지, 어떤 함수들을 작성해야 할지 등을 작성

 

1. 전체 사람의 수 입력받는다.

2. 이차원 배열에 몸무게와 키를 할당해준다.

3. 나보다 몸무게, 키 모두 큰 사람일경우 카운트 해준다

=> 이중반복문을 돌리면서 몸무게, 키가 둘다 클 경우 cnt++를 해준다.

시작은 cnt=1로 시작을 한다. 그리고 한번 반복문을 돌면 cnt는 다시 초기화를 해줘야한다.

 

 

 

 

시도 회차 수정 사항

- 무분별하게 "맞았습니다" 가 나올때까지 수정하는 형태의 문제 풀이를 반복하면, 내가 어떤 실수를 해서 해당 문제를 틀렸는지 모르게 된다
- 틀렸습니다를 받았다면 왜 틀렸는지 고민핸보고, 어떻게 수정할 수 있는지 고민하는 과정을 작성
- 위에 내가 세울 설계에서 어떤 부분이 틀렸는지도 함께 점검
public class Main {
	public static void main(String[] args) throws Exception, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));	
		
		int n = Integer.parseInt(br.readLine());
		int arr[][] = new int[n][2];
		
		
		for(int i=0; i<n; i++) {
			String[] input =br.readLine().split(" ");
			arr[i][0] = Integer.parseInt(input[0]);
			arr[i][1] = Integer.parseInt(input[1]);
		}
		
		for(int i=0; i<n; i++) {
			int cnt=1;
			for(int j=0; j<n; j++) {
				if(arr[i][0] < arr[j][0] && arr[i][1] < arr[j][1]) {
					cnt++;
				}
				
			}
			System.out.print(cnt+ " ");
			
		}
		
	}
}