Skip to content

Commit

Permalink
πŸ”€merge: [Week 16] BOJ 자료ꡬ쑰 2 - 3문제 μ™„λ£Œ (#69)
Browse files Browse the repository at this point in the history
* ✨feat: BOJ_2075_N번째_큰_수 μ•Œκ³ λ¦¬μ¦˜ κ΅¬ν˜„

* μ²˜μŒμ— ArrayList둜 ν’€μ—ˆλŠ”λ° μ‹œκ°„μ΄ˆκ³Όκ°€ μ•ˆλ‚˜μ„œ μš°μ„ μˆœμœ„ νλ‘œλ„ ν•œλ²ˆ 더 ν’€μ—ˆλ‹€.

* ✨feat: BOJ_7662_이쀑_μš°μ„ μˆœμœ„_큐 μ•Œκ³ λ¦¬μ¦˜ κ΅¬ν˜„

* μ΅œλŒ€ νž™, μ΅œμ†Œ νž™μ„ κ΅¬ν˜„ν•œ λ‘κ°œμ˜ μš°μ„ μˆœμœ„ 큐둜 ν’€λ©΄ remove() λ©”μ„œλ“œλ‘œ 인해 μ‹œκ°„μ΄ˆκ³Όκ°€ λ‚œλ‹€.
* TreeMap은 ν‘μ λ‚˜λ¬΄λ‘œ κ΅¬ν˜„λ˜μ–΄ μžˆμ–΄μ„œ μ–‘μͺ½ λλ‹¨μ˜ 숫자λ₯Ό O(1)둜 κΊΌλ‚΄μ˜¬ 수 μžˆλ‹€.

* ✨feat: BOJ_1620_λ‚˜λŠ”μ•Ό_포켓λͺ¬_λ§ˆμŠ€ν„°_μ΄λ‹€μ†œ μ•Œκ³ λ¦¬μ¦˜ κ΅¬ν˜„

* λ‹€λ₯Έ ν’€μ΄λ‘œλŠ” λ‘κ°œμ˜ HashMap에 [이름, 인덱슀], [인덱슀, 이름]을 μ €μž₯ν•˜λŠ” 방법이 μžˆκ² λ‹€.
* 또 λ‹€λ₯Έ ν’€μ΄λ‘œλŠ” ν•œκ°œμ˜ HashMap에 [이름, 인덱슀], [인덱슀, 이름]을 λ¬Έμžμ—΄ ν˜•νƒœλ‘œ 두 번 μ €μž₯ν•˜λŠ” 방법이 μžˆκ² λ‹€.
* 숫자 or λ¬Έμžμ—΄ μ—¬λΆ€λ₯Ό νŒλ‹¨ν•˜λŠ” 방법이 쑰금 κ³ λ―Όλ˜μ—ˆλ‹€.
  • Loading branch information
jinny-l committed Jun 12, 2023
1 parent 148e69f commit b0a60d4
Show file tree
Hide file tree
Showing 3 changed files with 156 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package week_16;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

// λ‹€λ₯Έ ν’€μ΄λ‘œλŠ” λ‘κ°œμ˜ HashMap에 [이름, 인덱슀], [인덱슀, 이름]을 μ €μž₯ν•˜λŠ” 방법이 μžˆκ² λ‹€.
// 또 λ‹€λ₯Έ ν’€μ΄λ‘œλŠ” ν•œκ°œμ˜ HashMap에 [이름, 인덱슀], [인덱슀, 이름]을 λ¬Έμžμ—΄ ν˜•νƒœλ‘œ 두 번 μ €μž₯ν•˜λŠ” 방법이 μžˆκ² λ‹€.
// 숫자 or λ¬Έμžμ—΄ μ—¬λΆ€λ₯Ό νŒλ‹¨ν•˜λŠ” 방법이 쑰금 κ³ λ―Όλ˜μ—ˆλ‹€.
public class BOJ_1620_λ‚˜λŠ”μ•Ό_포켓λͺ¬_λ§ˆμŠ€ν„°_μ΄λ‹€μ†œ {

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
StringBuilder sb = new StringBuilder();

// 개수 μž…λ ₯
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());

// λ¦¬μŠ€νŠΈμ™€ 배열에 포켓λͺ¬ 이름 및 인덱슀 μ €μž₯
Map<String, Integer> map = new HashMap<>(); // 포켓λͺ¬ 이름, 인덱슀 μ €μž₯
String[] pokemons = new String[n]; // 포켓λͺ¬ μ΄λ¦„λ§Œ μ €μž₯

for (int i = 0; i < n; i++) {
String name = br.readLine();

map.put(name, i + 1);
pokemons[i] = name;
}

// λ‹΅μ•ˆ 탐색
for (int i = 0; i < m; i++) {
String input = br.readLine();

try {
int number = Integer.parseInt(input);
sb.append(pokemons[number - 1]).append("\n");
} catch (NumberFormatException e) {
sb.append(map.get(input)).append("\n");
}
}
System.out.print(sb);
}

}
42 changes: 42 additions & 0 deletions jinny-l/week_16/BOJ_2075_N번째_큰_수.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package week_16;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class BOJ_2075_N번째_큰_수 {

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

// 개수 μž…λ ₯
int n = Integer.parseInt(br.readLine());

// μš°μ„ μˆœμœ„ 큐둜 μž…λ ₯
PriorityQueue<Integer> queue = new PriorityQueue<>();

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

for (int j = 0; j < n; j++) {
int tmp = Integer.parseInt(st.nextToken());

if (queue.size() == n) { // μš°μ„ μˆœμœ„ 큐 크기가 N이면 큐 μ•ˆμ— μžˆλŠ” κ°’κ³Ό 비ꡐ
int cmp = queue.peek();

if (tmp > cmp) { // μƒˆλ‘œμš΄ 값이 큐 μ•ˆμ— μžˆλŠ” 값보닀 크면 pollν•˜κ³  add
queue.poll();
queue.add(tmp);
}
} else { // μš°μ„ μˆœμœ„ 큐 크기가 5보닀 μž‘μœΌλ©΄ 큐에 값을 λ„£λŠ”λ‹€.
queue.add(tmp);
}
}
}

System.out.println(queue.poll());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package week_16;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.TreeMap;

// PriorityQueueλ₯Ό μ‚¬μš©ν•΄μ„œ λ‘κ°œμ˜ 큐λ₯Ό μ‚¬μš©ν•΄μ„œ 풀이 μ‹œ, remove둜 인해 μ‹œκ°„μ΄ˆκ³Ό λ°œμƒ
// TreeMap은 ν‘μ λ‚˜λ¬΄λ‘œ κ΅¬ν˜„λ˜μ–΄ μžˆμ–΄μ„œ μ–‘μͺ½ λλ‹¨μ˜ 숫자λ₯Ό O(1)둜 κΊΌλ‚΄μ˜¬ 수 μžˆλ‹€.
public class BOJ_7662_이쀑_μš°μ„ μˆœμœ„_큐 {

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();

// ν…ŒμΌ€ μž…λ ₯
int tc = Integer.parseInt(br.readLine());

for (int i = 0; i < tc; i++) { // ν…ŒμΌ€λ§ŒνΌ 반볡

// 개수 μž…λ ₯
int n = Integer.parseInt(br.readLine());

// 트리맡으둜 μ €μž₯
TreeMap<Integer, Integer> map = new TreeMap<>(); // Key: 숫자, Value: 개수

for (int j = 0; j < n; j++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
String operator = st.nextToken();
int number = Integer.parseInt(st.nextToken());

if (operator.equals("I")) {
map.put(number, map.getOrDefault(number, 0) + 1);
continue;
}

if (operator.equals("D")) {
if (map.size() < 1) { // 맡이 λΉ„μ–΄μžˆμœΌλ©΄ λ¬΄μ‹œ
continue;
}

// 맡이 λΉ„μ–΄μžˆμ§€ μ•Šλ‹€λ©΄ min or max κ°’ μ°ΎκΈ°
int toDelete = number == 1 ? map.lastKey() : map.firstKey();
int value = map.get(toDelete);

if (value == 1) { // μ‚­μ œν–ˆμ„ λ•Œ 값이 0이면 μ‚­μ œ
map.remove(toDelete);
} else { // 값이 0이 μ•„λ‹ˆλ©΄ value -1
map.put(toDelete, map.getOrDefault(toDelete, 0) - 1);
}
}
}
if (map.size() < 1) {
sb.append("EMPTY\n");
} else {
sb.append(map.lastKey())
.append(" ")
.append(map.firstKey())
.append("\n");
}
}
System.out.print(sb);
}
}

0 comments on commit b0a60d4

Please sign in to comment.