본문 바로가기
개발/[백준] 브론즈 마스터하기

백준 5597번 [자바] _ 과제 안 내신 분..?

by 쑨토리 2023. 1. 4.
반응형

 

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

 

5597번: 과제 안 내신 분..?

X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다. 교수님이 내준 특별과제를 28명이 제출했는데,

www.acmicpc.net


내 첫번째 풀이법_ Scanner를 이용하고, 이중포문으로 배열 확인하기.

 

 

-> 이 풀이법이 가장 먼저 생각이 나서 풀어보았다...

너무 긴것같아서 다른 사람들의 풀이를 참고해보니 첫번째로 배열을 꼭 두개를 생성하지 않아도 풀 수 있다는 것을 알게 되었고, 두번째로는 bolean을 이용해서 문제를 풀 수 있다는 것을 깨닫게 되어 두방법 모두를 활용해서 풀어보았다. 

import java.util.Scanner;

public class Main {
   public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int students[] = new int[28];

        //체크할 학생체크배열에 0을 다 대입해주기.
        int studentscheck[] = new int[31];
        studentscheck[0] = 0;
        for (int i = 1; i < 30; i++) {
            studentscheck[i] = 0;
        }

        //스캐너를 통해 학생 배열에 일단 순서 상관없이 담아주기
        for (int i = 0; i < 28; i++) {
            students[i] = sc.nextInt();
        }


        for (int i = 0; i < students.length; i++) {
            for (int j = 1; j < 31; j++) {
                if (students[i] == j) {
                    studentscheck[j] = j;
                }
            }
        }

        for (int i = 1; i < studentscheck.length; i++) {
            if (studentscheck[i] == 0) {
                System.out.println(i);
            }
        }
    }


}

 

두번째 풀이법_ 바로 입력 번호를 가져와서 배열에 대입하기.

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int studentsarray[] = new int[31];

        
        //28명이 제출할 예정이므로 28번을 입력받아서 해당 인덱스 값을 증가시켜준다. 
        for (int i = 0; i < 28; i++) {
            studentsarray[sc.nextInt()]++;
        }
        
        //1번부터 30번까지 돌면서 값인 0인 값을 찾으면 정답!
        for (int i = 1; i < 31; i++) {
            if(studentsarray[i]==0){
                System.out.println(i);
            }
        }
    }
}

 


세번째 풀이법 _ boolean 값을 이용하기!

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        boolean students[] = new boolean[31];

        //인덱스에 해당하는 값 가져오기!
        for (int i = 0; i < 28; i++) {
            students[sc.nextInt()]=true;
        }

        //boolean을 활용해서 값 출력
        for (int i = 1; i < 31; i++) {
            if (!students[i]){
                System.out.println(i);
            }
        }
    }
}