코딩 테스트

[코딩테스트] 백준 5597번: 과제 안 내신 분..?

dev.jelee 2025. 5. 22. 17:13

# 문제

 

# 코드

▼ 코드 1

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

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

    int[] students = new int[30];
    int[] assignment = new int[30];

    // 학생 출석번호 저장
    for (int i = 0; i < students.length; i++) {
      students[i] = i + 1;
    }

    // 제출한 학생 저장
    for (int j = 0; j < 28; j++) {
      int num = Integer.parseInt(br.readLine());
      
      assignment[num-1] = num; // index 때문에 num-1
    }

    // 제출하지 않은 학생 찾기.
    for (int i = 0; i < students.length; i++) {

      if (assignment[i] == 0) {
        System.out.println(i + 1);
      }
    }

  }
}

 

▼ 코드 2

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

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

    boolean[] submitted = new boolean[30];

    // 제출한 학생
    for (int i = 0; i < 28; i++) {
      int num = Integer.parseInt(br.readLine());

      submitted[num - 1] = true;
    }

    // 제출하지 않은 학생
    for (int i = 0; i < 30; i++) {
      if (!submitted[i]) {
        System.out.println(i + 1); // index 때문에
      }
    }
  }
}

 

# 입/출력 결과

1번 코드와 2번 코드 입/출력 결과

 

# 과정

▼ 코드 1 과정

  1. BufferedReader + InputStreamReader 클래스를 사용하여 입력값 받기.
  2. int[] students 배열 크기를 30으로 선언.
  3. int[] assignment 배열 크기를 30으로 선언.
  4. for문 사용해서 students[i] 학생 출석번호 저장하기.
  5. for문 사용해서 제출한 학생 입력값을 int num에 받아서 제출한 학생 출석 번호에 num 저장. assignment[num-1] = num
  6. for문과 if문을 사용해서 assignment 요소 중 0인 값을 찾아서 출력.

 

▼ 코드 2 과정

  1. BufferedReader + InputStreamReader 클래스를 사용하여 입력값 받기.
  2. boolean[] submitted 배열 크기를 30으로 선언.
  3. for문 사용해서 계산 - 제출한 학생
    • : int num에 제출한 학생 번호를 입력 받기.
    • : submitted[num -1] 제출한 학생은 true 값으로 저장.
  4. for문 사용해서 계산 - 제출하지 않은 학생
    • : 30번 반복해서 false 값을 가진 인덱스 찾기.
    • : !submitted 는 false를 찾는 조건문. 그리고 i+1 해준 이유는 index 때문에.

 

# 느낀 점

  • 이번 문제는 어제 풀은 문제보다 더 오래 걸렸다. 내가 생각한 대로 결과가 나오지 않아서 어느 부분에서 틀렸는지 혼자 열심히 찾다보니 문제 풀이 성공은 했는데, 너무 오래 걸렸다.
  • 내가 풀고 싶은 방식은 boolean 값으로 제출 여부를 확인한 뒤, 제출을 안 낸 학생을 출력하는 거였는데 자주 사용하지 않는 방식이다보니 과제제출한 변수 배열 길이를 30으로 고정으로 주고 28개만 입력 받게하고, 나머지 안 받는 값은 자동으로 0이 들어가니 나중에 0인 index를 찾아서 출력하였다.
  • 나중에 chat-gpt한테 내가 작성한 코드를 넘겨준 다음 boolean 값을 활용해서 효율적인 코드로 만들어달라고 하니 알려주어서 한번 쭉 읽고 혼자서 다시 풀어보았다.