BOJ 1009 분산처리
2023-05-25
1 min
N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.
첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 보다 크거나 같고 보다 작다.
본 문제는 주어진 배열에서 특정 숫자가 존재하는지 확인하는 문제이다.
배열의 크기가 최대 100,000이기 때문에 의 시간 복잡도를 가지는 선형 탐색으로는 시간 초과가 발생한다.
Set을 이용하면 원소의 존재 여부를 의 시간 복잡도 만으로 판별할 수 있다.
따라서 Set을 이용해 아래와 같은 로직을 구현하면 해당 문제를 풀어낼 수 있다.
import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); HashSet<Integer> set = new HashSet<>(); // 원본 배열 개수 입력 int N = Integer.parseInt(br.readLine()); // 원본 배열 입력 및 Set에 추가 String[] s = br.readLine().split(" "); for(int i = 0; i < N; i++) set.add(Integer.parseInt(s[i])); // 탐색할 숫자 개수 입력 int M = Integer.parseInt(br.readLine()); // 탐색할 숫자 입력 및 Set에 존재하는지 판별 s = br.readLine().split(" "); for(int i = 0; i < M; i++) { if(set.contains(Integer.parseInt(s[i]))) sb.append("1\n"); else sb.append("0\n"); } System.out.println(sb); } }
#include <iostream> #include <set> #define fastio ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr) #define endl '\n' using namespace std; int main() { fastio; set<int> arr; // 원본 배열 개수 입력 int N, M, T; cin >> N; // 원본 배열 입력 및 Set에 추가 for(int i = 0; i < N; i++) { cin >> T; arr.insert(T); } // 탐색할 숫자 개수 입력 cin >> M; // 탐색할 숫자 입력 및 Set에 존재하는지 판별 for(int i = 0; i < M; i++) { cin >> T; if(arr.find(T) != arr.end()) cout << "1" << endl; else cout << "0" << endl; } return 0; }
import java.util.* import java.io.* fun main(args: Array<String>) = with(System.`in`.bufferedReader()) { var set: MutableSet<Int> = mutableSetOf<Int>() // 원본 배열 개수 입력 var N = readLine().toInt() // 원본 배열 입력 및 Set에 추가 var s = readLine().split(" ") for (i in 0 until N) { set.add(s[i].toInt()) } // 탐색할 숫자 개수 입력 var M = readLine().toInt() // 탐색할 숫자 입력 및 Set에 존재하는지 판별 s = readLine().split(" ") for (i in 0 until M) { if(set.contains(s[i].toInt())) println("1") else println("0") } }
from sys import stdin def main(): arr = set() # 원본 배열 개수 입력 N = int(stdin.readline()) # 원본 배열 입력 및 Set에 추가 s = stdin.readline().split(' ') for i in range(N): arr.add(int(s[i])) # 탐색할 숫자 개수 입력 M = int(stdin.readline()) # 탐색할 숫자 입력 및 Set에 존재하는지 판별 s = stdin.readline().split(' ') for i in range(M): if int(s[i]) in arr: print(1) else: print(0) if __name__ == "__main__": main()
import Foundation func main() { var set = Set<Int>() // 원본 배열 개수 입력 var N = Int(readLine()!)! // 원본 배열 입력 및 Set에 추가 var s = readLine()!.split(separator: " ") for i in 0..<N { set.insert(Int(s[i])!) } // 탐색할 숫자 개수 입력 var M = Int(readLine()!)! // 탐색할 숫자 입력 및 Set에 존재하는지 판별 s = readLine()!.split(separator: " ") for i in 0..<M { if set.contains(Int(s[i])!) { print("1") } else { print("0") } } } main()