๋ฌธ์ (์ถ์ฒ: 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 ์ธ๋ฑ์ค ๋ฐํ
: ์ค์๊ฐ๊ณผ ๊ทธ์ ๊ฐ ๊ตฌ๊ฐ์ ํด๋นํ๋ ๊ฐ์ด๋ผ๋ฉด ์ค์๊ฐ ์ธ๋ฑ์ค ๋ฐํ
: ์ค์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ ๋ฐ์ดํฐ์ ์ ์ ํํ๋ค.
๋ชจ๋ ๊ฒฝ์ฐ์ ํด๋นํ์ง ์๋๋ค๋ฉด ์ข ๋ฃ
์ฌ์ค ์ด ๋ฌธ์ ๋ ์ด๋ ๊ฒ ํด๊ฒฐํ๋ ๊ฒ์ด ๋ง๋์ง ๋ชจ๋ฅด๊ฒ ๋ค! ๐ซฃ

'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 11967_๋ถ์ผ๊ธฐ (0) | 2024.02.01 |
---|---|
[Baekjoon] 8892_ํฐ๋ฆฐ๋๋กฌ (1) | 2024.01.31 |
[Baekjoon] 10431_์ค์ธ์ฐ๊ธฐ (1) | 2024.01.29 |
[Baekjoon] 2865_๋๋ ์๋ํ ์ํผ์คํK (0) | 2024.01.26 |
[Baekjoon] 2799_๋ธ๋ผ์ธ๋ (1) | 2024.01.25 |