[백준 10815] 숫자 카드 JAVA

2024. 1. 12. 21:32·코딩테스트/백준

 

 

 


 

 

 

처음 짠 코드는 시간복잡도가 O(n * m) 이라 시간 초과 당했다...

 

아래가 처음 코드

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int n = 0, m = 0;
		int a = 0;
		
		n = sc.nextInt();
		int[] nArr = new int [n];
		
		for (int i = 0; i < nArr.length; i++) {
			nArr[i] = sc.nextInt();
		}
		
		m = sc.nextInt();
		int[] mArr = new int [m];
		for (int i = 0; i < mArr.length; i++) {
			mArr[i] = sc.nextInt();
		}
		
		for (int i = 0; i < mArr.length; i++) {
			for (int j = 0; j < nArr.length; j++) {
				if(mArr[i] == nArr[j]) {
					System.out.print("1 ");
					a = 1;
				}
			}
			if(a != 1) {
				System.out.print("0 ");
			}
			a = 0;
		}
	}
}

 

 

 

질문 게시판에 나와 같이 시간 초과 당한 사람들이 많았는데, 답변 보니 해시 셋을 사용하라더라.

해시 셋이 뭔지 몰랐는데,, 이번 문제 풀면서 공부 좀 했다.

 

 

대충 알아본 HashSet의 특징은 이랬다.

 

 

  • 중복을 허용하지 않는다.
  • null을 허용한다.
  • 해시 테이블을 사용한다.
  • O(1)의 시간복잡도를 가진다.
  • 삽입 순서를 보장하지 않는다.
  • 삽입 순서를 보장하려면 LinkedHashSet을 사용해야 한다.

 

 

HsahSet을 이용하여 새롭게 코드를 작성해봤다.

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int n = 0, m = 0;

		n = sc.nextInt();
		int[] nArr = new int[n];

		Set<Integer> nSet = new HashSet<>();
		for (int i = 0; i < nArr.length; i++) {
			nArr[i] = sc.nextInt();
			nSet.add(nArr[i]);
		}

		m = sc.nextInt();
		int[] mArr = new int[m];

		for (int i = 0; i < mArr.length; i++) {
			mArr[i] = sc.nextInt();
		}

		for (int i = 0; i < mArr.length; i++) {
			if (nSet.contains(mArr[i])) {
				System.out.print("1 ");
			} else {
				System.out.print("0 ");
			}
		}
	}
}

 

 

이 코드는 O(n + m)의 시간복잡도를 가진다. 전보다 확실히 시간 복잡도가 작아졌다.

 

 

 

채점 결과

 

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

[백준 13241] 최소공배수 JAVA  (0) 2024.01.25
[백준 3052] 나머지 JAVA  (0) 2024.01.23
[백준 9012] 괄호 JAVA  (0) 2024.01.07
[백준 1929] 소수 구하기 JAVA  (0) 2023.01.27
[백준 5522] 카드 게임 JAVA  (0) 2023.01.24
'코딩테스트/백준' 카테고리의 다른 글
  • [백준 13241] 최소공배수 JAVA
  • [백준 3052] 나머지 JAVA
  • [백준 9012] 괄호 JAVA
  • [백준 1929] 소수 구하기 JAVA
오은이
오은이
  • 오은이
    오은이 하우스
    오은이
  • 전체
    오늘
    어제
    • 분류 전체보기 (79) N
      • 일기 (2)
      • Python (1)
      • Java (4)
      • CS (2)
      • 코딩테스트 (26)
        • 백준 (25)
        • 프로그래머스 (1)
      • 웹 개발 (17)
        • Spring (6)
        • JavaScript (3)
        • WebSquare (5)
        • React (3)
      • DB (5)
        • MySQL (4)
        • Oracle (1)
      • 서버&인프라 (18) N
        • Server (5)
        • Cloud (12) N
        • Linux (1)
      • 자격증 (4)
        • 정보처리기사 (1)
        • AICE (3)
  • 블로그 메뉴

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

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    AICE Associate
    자바
    알고리즘
    백준
    티스토리챌린지
    docker
    리액트
    Java
    dockerspring
    db
    클라우드
    docker배포
    websquare
    react
    MySQL
    SpringBoot
    Spring
    cloud DB
    EC2
    오블완
    머신러닝
    클라우드 배포
    Apache
    tomcat
    웹스퀘어
    백준자바
    google cloud run
    AI
    톰캣
    AICE
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
오은이
[백준 10815] 숫자 카드 JAVA
상단으로

티스토리툴바