[백준 / java 11] 1차원 배열 > 5597번 과제 안 내신 분...?

2025. 5. 13. 11:14·코테/백준

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

문제

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

교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오.

입력

입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)가 한 줄에 하나씩 주어진다. 출석번호에 중복은 없다.

출력

출력은 2줄이다. 1번째 줄엔 제출하지 않은 학생의 출석번호 중 가장 작은 것을 출력하고, 2번째 줄에선 그 다음 출석번호를 출력한다.

 

 

 

* 풀이

import java.util.*;

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

       for (int i = 0; i < 28; i++) { // 제출한 사람 인덱스값 1
            int a = sc.nextInt(); 
            arr[a - 1] = 1;
        }

        for (int i = 0; i < 30; i++) { // 제출 안 한 사람 찾기
            if (arr[i] == 0) {
                System.out.println(i + 1);
            }
        }
    }
}

 

 

 

다른 풀이들 찾아보니 이렇게 풀었다.

큰 차이 없고 배열 선언할 때가 차이 있었는데 이 식에선 int[] arr= new int[31];로 해주었더라는.

import java.util.*;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int[] arr = new int[31]; // 1~30번 인덱스 사용. 
		
		for(int i = 1; i < 29; i++){ // 과제 제출한 사람들 인덱스값 1
			int a = sc.nextInt();
			arr[a] = 1;
		}
		
		for(int i = 1; i <= 30; i++){ // 과제 제출하지 않은, 인덱스값이 0인 인덱스 출력
			if(arr[i] != 1) {
				System.out.println(i);
			}
		}
	}
}

 

int[] arr= new int[31];

여기에서 [31]을 한 이유?

for (int i = 1; i <29; i++)처럼 1부터 시작하는 반복문을 쓰기 때문에, 배열 인덱스도 1~30을 쓰려면 int[31]로 만들어야 한다.

학생 번호는 1~30까지 존재하고 자바 배열은 0부터 시작한다.

학생 번호 = 배열 인덱스로 맞춰서 쓰고 싶다면 배열을 31로 만들어준다. 이때 arr[0]은 쓰이지 않는다.

 

> 실제 번호와 배열 인덱스를 일치시키고 싶을 때 하나 더 크게 만든다.

 

솔찌 아직도 이해가 잘 안 감;

그러나 확실히 [31]로 하니까 조건문, 반복문 쪽에서 1 더하고 빼고 안 해서 코드가 훨씬 직관적으로 보인다.

 

 

 

👉 왜 arr[i] = a; 가 아니라 arr[a] = 1; 일까?

이 코드는 "a번 학생이 제출했다" 라는 사실을 기록하려는 것.

  • 제출한 학생 번호가 예를 들어 5라면?
  • arr[5] = 1;
    → “5번 학생은 제출했다” 라고 표시하는 것.

즉,
배열의 인덱스를 '학생 번호'로 사용하고
값(1)로 제출 여부를 표시하는 방식.

=>  1과 0으로 제출 여부를 표시한다!

 

 

 

 

 

저작자표시 비영리 변경금지 (새창열림)

'코테 > 백준' 카테고리의 다른 글

[백준 / java 11] 11654번 아스키 코드, 2743번 단어 길이 재기  (0) 2025.05.15
[백준 / java 11] 1차원 배열 > 3052번 나머지  (0) 2025.05.14
[백준 / java 11] 1차원 배열 > 10813번 공 바꾸기  (0) 2025.05.12
[백준 / java 11] 1차원 배열 > 10810번 공 넣기  (0) 2025.05.10
[백준 / java 11] 1차원 배열 > 10871번 X보다 작은 수, 2562번 최댓값  (0) 2025.05.09
'코테/백준' 카테고리의 다른 글
  • [백준 / java 11] 11654번 아스키 코드, 2743번 단어 길이 재기
  • [백준 / java 11] 1차원 배열 > 3052번 나머지
  • [백준 / java 11] 1차원 배열 > 10813번 공 바꾸기
  • [백준 / java 11] 1차원 배열 > 10810번 공 넣기
amying
amying
공부해보겠슨
  • amying
    꽁꽁 얼어붙은 자바 위를 자박자박
    amying
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (332)
      • 공부 (55)
        • JAVA (17)
        • Spring (17)
        • Java Script (1)
        • React (0)
        • SQL (3)
        • DB (1)
        • CS (13)
        • 기술면접 (3)
      • Git (2)
      • 강의 (36)
        • 부스트코스: Connect On: 테크와 나를 잇.. (16)
        • 부스트코스: CS50 (20)
      • 네이버 부스트캠프 베이직 (25. 06) (0)
      • 에러 (10)
      • 코테 (205)
        • 백준 (29)
        • 프로그래머스 JAVA Lv.0 (116)
        • 프로그래머스 JAVA Lv.1 (7)
        • 프로그래머스 SQL (53)
      • 개인 프로젝트 (16)
        • 책첵 CHAEKCHECK (2)
        • 일정 관리 서비스 만들기 (0)
        • 게시판 만들기 (eclipse-JSP) (14)
      • 이것저것 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    부스트코스
    springbot
    부스트코스강의
    코딩테스트_입문
    lombok
    책첵개발일지
    ORACLE에러
    코테
    오라클에러
    git명령어
    데이터연동
    프로그래머스
    업무자동화
    알고리즘
    Java
    에러
    CS50
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
amying
[백준 / java 11] 1차원 배열 > 5597번 과제 안 내신 분...?
상단으로

티스토리툴바