ahlight
개발 저장소
ahlight
전체 방문자
오늘
어제
  • 분류 전체보기 (197)
    • Java (7)
    • Spring (5)
    • JPA (2)
    • JavaScript (0)
    • Computer Science (12)
      • 디자인패턴, 프로그래밍 패러다임 (1)
      • 네트워크 (4)
      • 운영체제 (4)
      • 데이터베이스 (3)
      • 자료구조 (0)
    • 알고리즘 (1)
    • 프로그래머스 (13)
    • 백준 (94)
    • 서평 (3)
    • 회고 (1)
    • TIL (58)
    • 기타 (1)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 넥스트스텝
  • 클린코드
  • 라즈베리파이4 #홈서버 #포트포워딩 #dhcp
  • TDD
  • Java

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ahlight

개발 저장소

백준

백준 5597번 Java

2022. 10. 25. 11:48

문제

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

 

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

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

www.acmicpc.net

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main5597 {
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		List<Integer> students = new ArrayList<Integer>();
		List<Integer> submitStudents = new ArrayList<Integer>();
		
		for (int i=1; i<31; i++) {
			students.add(i);
		}
		
		for (int i=1; i<29; i++) {
			submitStudents.add(sc.nextInt());
		}
		sc.close();
		
		for (int student:students) {
			if (!submitStudents.contains(student)) {
				System.out.println(student);
			}
		}
	}
}

1. 일단은 정답이다.

2. 하지만 타 블로그에 올라온 글들과 비교를 했을 때 내가 작성한 코드가 간결하고 직관적이지 못하다는 사실을 깨달았다.

3. 내가 사용한 방식은 학생번호(1)와 과제를 제출한 학생(2)의 List를 각각 만들어 해당 원소가 있는지 비교를 한다.

4. 문제점은

 첫째, for문의 무분별한 사용.

 둘째, 현재는 30이라는 작은 수지만 훨씬 더 큰 크기의 List가 생성될 경우 비교속도에 대한 저하가 우려된다.

 셋째, 굳이 생성안해도 될 변수를 생성함으로써 메모리가 낭비된다.

 넷째, 백준내에서 1차원 배열로 분류된 문제인데 List를 통해 활용했으니 접근 방식 자체가 잘못됐다고 볼 수 있다.

5. 타 블로그에서 올라온 글을 살펴보자.

import java.util.*;

public class Baekjoon5597 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int[] student = new int[31];
		
		for(int i=1; i<29; i++) {
			int success = sc.nextInt();
			student[success] = 1;
		}
		for(int i=1; i<student.length; i++) {
			if(student[i]!=1)
				System.out.println(i);
		}
		
		
		sc.close();

	}

}

이외에도 boolean  배열을 통한 방식 등이 있지만 본질은 같다.  입력된 숫자를 배열의 인덱스로 넣으면서 값을 1로 초기화 시킨다. int형 배열의 경우 기본값이 0이기 때문에 비교하는데는 문제가 없다.

 

6. 정답을 맞추느냐보단 올바른 해답이었는지, 그 탐색과정이 더 중요하다.

 

 

 

 

출처 : https://like-a-forest.tistory.com/48

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

백준 2738번  (0) 2022.10.26
백준 1546번  (0) 2022.10.25
백준 2438번 220914  (0) 2022.09.14
백준 10950번 220914  (0) 2022.09.14
백준 2480번 220906  (0) 2022.09.06
    '백준' 카테고리의 다른 글
    • 백준 2738번
    • 백준 1546번
    • 백준 2438번 220914
    • 백준 10950번 220914
    ahlight
    ahlight

    티스토리툴바