DAT (Direct Access Table)

From_A_To_Z·2026년 1월 24일

알고리즘

목록 보기
1/10

  • 배열의 index와 value를 프로그래머가 의미 부여해서 사용하는 것
  • 일반 배열을 통해서도 문제 풀이가 가능하지만 DAT는 문제 유형에 따라 연산 횟수를 줄일 수 있음
  • 이미지 출처: 나노 바나나 프로 (Nano Banana Pro)

문제 유형

(1) 숫자 게임

  • 심판이 1~9까지의 숫자 중 하나를 부름
  • 1~9까지의 숫자 중 하나를 몇개인지 질문

(2) 여행갈 나라 고르기

  • 나라들은 각각 고유번호가 있다
  • 민철이는 여행 가려고 하는데 이미 갔던 여행지는 가고 싶지 않음
  • N개의 이전에 들렀던 나라 목록이 입력
  • 민철이가 가려고 하는 나라의 고유번호가 주어지면 갈지 말지 결정

코드 예시 (Java)

import java.io.*; 
import java.util.*;

public class Main {

	static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		int type = sc.nextInt();
		//idx : 1~9 까지의 숫자가 val: 각각 몇개씩? size : 마지막인덱스(9)+1
		int DAT[] = new int[10];
		
		if(type == 1) {
			
			int n = sc.nextInt();
			for(int i=0; i<n; i++) {
				int now = sc.nextInt();
				//DAT에서 now가 index를 뜻하는지, value를 뜻하는지?
				DAT[now]++;
			}
			for(int i=1; i<=9; i++) {
				System.out.println(i+":"+DAT[i]+"개");
			}
		}
	}
}
import java.io.*; 
import java.util.*;

public class Main {

	static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		int n = sc.nextInt();
		int DAT[] = new int[10];
		for(int i=0; i<n; i++) {
			int now = sc.nextInt();
			DAT[now]++;
		}
		int flag=0;
		for(int i=1; i<=9; i++) {
			if(DAT[i] >=2) {
				flag =1;
			}
		}
		if(flag == 1) {
			System.out.println("중복있음");
		}
		else {
			System.out.println("중복없음");
		}
		
		
	}
}
profile
What goes around comes around.

0개의 댓글