[백준] java 5597

Sundae·2023년 7월 8일
0

백준

목록 보기
1/63
post-thumbnail
post-custom-banner

https://www.acmicpc.net/submit/5597/63146239


문제

X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다.
교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오.

문제 접근 , 풀이 과정

1 ~ 30의 숫자 중 입력값과 비교 했을 때 없는 숫자를 어떻게 출력할까?
으로 접근했다.
먼저, ArrayList에 1~30을 넣고 입력값과 비교하여 없으면 해당 인덱스를 삭제하게 만들었다.

import java.io.*;
import java.util.ArrayList;

public class Main{
	public static void main(String[] args) throws IOException { 
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		ArrayList<Integer> array = new ArrayList<>();
		
		// 1 ~ 30 값 대입
		for(int i = 0; i < 30; i++)
			array.add(i , i+1);
		
		for(int i = 0; i < 28; i++) {
			int tmp = Integer.parseInt(bf.readLine());
			// 일치하면 일치한 array의 요소를 삭제
			for(int j = 0; j < 30; j++) {
				if(tmp == array.get(j)) {			
					array.remove(j);
					break;				
				}	
							
			}
		}
		if(array.get(0) > array.get(1))
			System.out.print(array.get(1) + "\n" + array.get(0));
		else
			System.out.print(array.get(0) + "\n" + array.get(1));
		
	}
}

배운점

해당 코드가 비효율적이라 생각하여 랭킹에 있는 코드들을 보고 비교하였다.


  1. (31의 크기를 가진 배열을 생성하여 인덱스에 입력값을 넣고 해당 인덱스에 값 1을 넣는다. 그 후 인덱스를 훑을 때 입력값이 들어있지 않으면 해당 인덱스를 출력한다)

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int stu[] = new int[31];
		for(int i = 0 ; i < 28 ; i++) {
			stu[Integer.parseInt(br.readLine())] = 1;
		}
		for(int i = 1 ; i <= 30 ; i++) {
			if(stu[i] == 0) System.out.println(i);
		}
	}
  1. 1번과 유사하다.
    1번 코드와 마찬가지로 인덱스에 입력값을 넣고 해당 인덱스에 true를 넣는다. 비교했을 때 ture가 아닌 false를 반환하는 인덱스를 출력한다.

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

        boolean[] arr = new boolean[31];

        int temp;
        for (int i=0; i<28; i++) {
            temp = Integer.parseInt(br.readLine());
            arr[temp] = true;
        }

        for (int i=1; i<=30; i++) {
            if (!arr[i]) System.out.println(i);
        }
    }
profile
성장 기록 / 글에 오류가 있다면 댓글 부탁드립니다.
post-custom-banner

0개의 댓글