๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 19637_IF๋ฌธ ์ข€ ๋Œ€์‹  ์จ์ค˜

๋ฟŒ์•ผ._. 2024. 1. 30. 21:46

Silver III

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/19637)

< IF๋ฌธ ์ข€ ๋Œ€์‹  ์จ์ค˜ >

 

๋ฌธ์ œ ํ’€์ด 

 

์ด๋ถ„ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

 

 my solution (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class _19637_ { // IF๋ฌธ ์ข€ ๋Œ€์‹  ์จ์ค˜
	static String name[];
	static int value[];

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st = new StringTokenizer(bf.readLine());

		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());

		name = new String[n];
		value = new int[n];

		for (int i = 0; i < n; i++) {
			st = new StringTokenizer(bf.readLine());

			name[i] = st.nextToken();
			value[i] = Integer.parseInt(st.nextToken());
		}

		for (int i = 0; i < m; i++) {
			int num = Integer.parseInt(bf.readLine());
			int result = search(num, 0, n - 1);
			bw.write(name[result] + "\n");
		}
		bw.flush();
	}

	private static int search(int num, int start, int end) {
		if (start > end) {
			return -1;
		}

		int mid = (start + end) / 2;

		if (value[mid] < num) {
			if (value[mid + 1] >= num) {
				return mid + 1;
			}
			return search(num, mid + 1, end);
		} else if (value[mid] >= num) {
			if (mid == 0) {
				return 0;
			}
			if (value[mid - 1] < num) {
				return mid;
			}
			return search(num, start, mid - 1);
		}
		return -1;
	}
}
๋ณ€์ˆ˜)
n, m : ์นญํ˜ธ์˜ ๊ฐœ์ˆ˜, ์บ๋ฆญํ„ฐ๋“ค์˜ ๊ฐœ์ˆ˜
name, value : ์นญํ˜ธ์˜ ์ด๋ฆ„, ์นญํ˜ธ์˜ ์ „ํˆฌ๋ ฅ
num : ์บ๋ฆญํ„ฐ์˜ ์ „ํˆฌ๋ ฅ
result : ์ „ํˆฌ๋ ฅ์— ๋งž๋Š” ์นญํ˜ธ์˜ ์ธ๋ฑ์Šค

 

์นญํ˜ธ์˜ ๊ฐœ์ˆ˜์™€ ์นญํ˜ธ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋Š” ์บ๋ฆญํ„ฐ๋“ค์˜ ๊ฐœ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.

n๊ฐœ์˜ ์ค„์— ์นญํ˜ธ์˜ ์ด๋ฆ„๊ณผ ์นญํ˜ธ์˜ ์ „ํˆฌ๋ ฅ์„ ์ž…๋ ฅ๋ฐ›์•„ ๊ฐ ๋ฐฐ์—ด์— ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

m๊ฐœ์˜ ์ค„์— ์บ๋ฆญํ„ฐ์˜ ์ „ํˆฌ๋ ฅ์„ ์ž…๋ ฅ๋ฐ›์•„ search ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ํ›„ ์–ป์€ ์ „ํˆฌ๋ ฅ์— ๋งž๋Š” ์นญํ˜ธ์˜ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์นญํ˜ธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

search (์บ๋ฆญํ„ฐ์˜ ์ „ํˆฌ๋ ฅ, start, end )

start ๊ฐ’์ด end ๊ฐ’๋ณด๋‹ค ํฌ๋ฉด ์กฐ๊ฑด์— ๋งž์ง€ ์•Š์œผ๋ฏ€๋กœ ์ข…๋ฃŒ

์ค‘๊ฐ„ ์ธ๋ฑ์Šค ๊ฐ’์„ start์™€ end๋ฅผ ํ•ฉํ•˜์—ฌ 2๋กœ ๋‚˜๋ˆˆ ๊ฐ’์œผ๋กœ ๊ตฌํ•œ๋‹ค.

 

์ค‘์•™๊ฐ’ < ์บ๋ฆญํ„ฐ์˜ ์ „ํˆฌ๋ ฅ์ธ ๊ฒฝ์šฐ

: ์ค‘์•™๊ฐ’๊ณผ ๋‹ค์Œ ๊ฐ’ ๊ตฌ๊ฐ„์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด๋ผ๋ฉด ์ค‘์•™๊ฐ’+1 ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜

: ์ค‘์•™๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฅธ์ชฝ ๋ฐ์ดํ„ฐ์…‹์„ ์„ ํƒํ•œ๋‹ค.

 

์ค‘์•™๊ฐ’ >= ์บ๋ฆญํ„ฐ์˜ ์ „ํˆฌ๋ ฅ์ธ ๊ฒฝ์šฐ

: ์ค‘์•™๊ฐ’์ด 0์ด๋ผ๋ฉด 0 ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜

: ์ค‘์•™๊ฐ’๊ณผ ๊ทธ์ „ ๊ฐ’ ๊ตฌ๊ฐ„์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด๋ผ๋ฉด ์ค‘์•™๊ฐ’ ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜

: ์ค‘์•™๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ๋ฐ์ดํ„ฐ์…‹์„ ์„ ํƒํ•œ๋‹ค.

 

๋ชจ๋“  ๊ฒฝ์šฐ์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ข…๋ฃŒ


์‚ฌ์‹ค ์ด ๋ฌธ์ œ๋Š” ์ด๋ ‡๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๋งž๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค! ๐Ÿซฃ