열정 실천

백준 3230번 :: 실버5 - 금메달, 은메달, 동메달은 누가? 본문

개발 공부/백준 문제풀이

백준 3230번 :: 실버5 - 금메달, 은메달, 동메달은 누가?

구운오니 2024. 3. 5. 22:20

잠깐 내려놓았던 자바와 알고리즘 문제풀기 시작한 지 3일차.....

첫째, 둘째 날은 자바 기억하는거에 집중하기 위해 브론즈 5문제로 워밍업하고 

오늘은 실버 5문제 중에 그래도 정답률 높은 걸로 골랐다.,,

2시간 꼬박 숨만쉬고 문제풀어서 성공...!

 

고민의 흔적,,,

 

문제를 읽고 난감했던 부분은 선수 번호에 대한 등수를 저장해야하는데 등수가 계속 뒤로 밀리는 시스템......?! 머리로는 해결이 안돼서 차근차근 숫자 적으면서 하니 다행히 15분 안에 머릿속으로 알고리즘은 돌아갔던 것 같다. 그치만 코딩하는 과정에 인덱스랑 선수 번호랑 for문의 i랑 계속해서 바뀌는 선수 등수랑 너무 많은 숫자 배열에 머리가 꼬였찌만...! 딱 집에 가고 싶었던 시간에 문제 해결..ㅎㅎ 근데 효율적인 코드는 아닌 것 같아서 친구들이랑 코드리뷰하는 작업이 필요하다고 느껴졌다. 이번에 알고리즘 스터디 떨어지면 내가 직접 친구들 모아서 만들어야겠따!!

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

public class beakjoon_3230 {

    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        //1차 경기 - 총 n명의 선수
        //배열의 인덱스는 등수를 의미
        //등수랑 인덱스랑 같게 하기 위해 0번째 인덱스는 안쓰고 배열의 크기 1+
        int[] rank1 = new int[n+1];

        //현재 선수의 등수를 담을 변수
        int per_rank = 0;

        for(int i =1; i<=n; i++){ //여기서 i는 선수 번호
            per_rank = Integer.parseInt(br.readLine());
            if(rank1[per_rank]!=0){ //배열의 기본값은 0
                for(int j = i; j>per_rank; j--){
                    rank1[j] = rank1[j-1]; // i선수 등수부터 n등까지 뒤로 미루기
                }
            }
            rank1[per_rank] = i;
        }


        //2차 경기 : 총 m명 선수 (1~m등까지)

        //rank1과 동일 : 인덱스는 등수, 담길 값은 선수번호
        int[] rank2 = new int[m+1];
        int m2 = m;  //for문에서 m을 써야해서 저장
        for(int i=1; i<=m2; i++,m--) {  //rank1[m]은 i번째 경기의 선수번호
            per_rank = Integer.parseInt(br.readLine());
            if (rank2[per_rank] != 0) {
                for (int j = i; j > per_rank; j--) {
                    rank2[j] = rank2[j - 1];
                }
            }
            rank2[per_rank] = rank1[m];
        }

        System.out.println(rank2[1]+"\n"+rank2[2]+"\n"+rank2[3]);

    }
}