[백준 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
오은이
오은이
  • 오은이
    오은이 하우스
    오은이
  • 전체
    오늘
    어제
    • 분류 전체보기 (86)
      • 일기 (2)
      • Python (1)
      • Java (5)
      • CS (2)
      • 코딩테스트 (26)
        • 백준 (25)
        • 프로그래머스 (1)
      • 웹 개발 (18)
        • Spring (7)
        • JavaScript (3)
        • WebSquare (5)
        • React (3)
      • DB (5)
        • MySQL (4)
        • Oracle (1)
      • 서버&인프라 (18)
        • Server (5)
        • Cloud (12)
        • Linux (1)
      • 자격증 (9)
        • 정보처리기사 (2)
        • AICE (7)
  • 블로그 메뉴

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

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바