-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโll occasionally send you account related emails.
Already on GitHub? Sign in to your account
51-9kyo-hwang #185
51-9kyo-hwang #185
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Version 1์์ ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ๊ฐ ๋ํด์ ธ์ ์ด๋ป๊ฒ ๊ตฌํํด์ผ ํ๋์ง ๊ฐ์ด ์ ์์กํ๋ค์...
3๊ฐ์ ์๋ฃ๊ตฌ์กฐ์ ์ ๋ณด๋ค์ ์ ์ฅํด์ ํ์ํ ์ ๋ณด๋ฅผ ์ฐพ์ ๋ฝ์๋ด๋๋ก ๊ตฌํํ์
จ๊ตฐ์!
์์ Version 1์์๋ recommend์์ 1๊ณผ -1๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด max, min_heap ์ ์ฌ์ฉํ์
จ์๋๋ฐ ์ด๋ฒ์๋ P(), N() ๋ฉ์๋๋ก ๊ตฌํํ์
จ๋ค์!
๊ทธ ์ด์ ๊ฐ recommend1~3์ผ๋ก ๋์ด๋๋ฉด์ ๋ฉ์๋๋ก ์ฒ๋ฆฌํ๋๊ฒ ํค์ฌ ํธํ๊ธฐ ๋๋ฌธ์ธ์ง ๊ถ๊ธํฉ๋๋ค!
์ฝ๋ ํ๋ํ๋์ฉ ์ฝ์ด๋ณด๋ฉด์ ๊ถ๊ธํ ๊ฑด ๋ฌผ์ด๋ณด๋ ค๊ณ ํ๋๋ฐ, PR์ด ์๋ฒฝ ๊ทธ ์์ฒด์ฌ์ ๋ฌผ์ด๋ณผ ๊ฒ ์์ต๋๋ค... ์ญ์ ๊ฐ๐๐ป
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ํด๋น ๋ฐฑ์ค ๋ฌธ์ ์์ N๊ณผ M์ ๋ํ ํฌ๊ธฐ๊ฐ ์ปค์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ฏผํด์ผํ๋๋ฐ์
์ ๋ ฌ, ์ญ์ , ์ถ๊ฐ๊ฐ ๋นจ๋ผ์ผ ํ๋๋ฐ ์ ๋ ฌ๋ Set ์๋ฃ๊ตฌ์กฐ๊ฐ ํ์ํ๋๊ตฐ์ ใ
ใ
ใ
ใ
๊ทธ๋์ TreeSet ํ์ตํด์ ํ์์ต๋๋ค.
๋ฌธ์ ๊ฐ ํน์ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์๊ตฌํ๋ ์ ๋ฐํ๋ค์ใ ใ ใ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
TreeSet<Problem> tree = new TreeSet<>();
List<TreeSet<Problem>> subtrees = new ArrayList<>();
for (int i = 0; i <= 100; i++) {
subtrees.add(new TreeSet<>());
}
HashMap<Integer, int[]> hMap = new HashMap<>();
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int no = Integer.parseInt(st.nextToken());
int level = Integer.parseInt(st.nextToken());
int group = Integer.parseInt(st.nextToken());
Problem p = new Problem(no, level, group);
subtrees.get(group).add(p);
tree.add(p);
hMap.put(no, new int[]{level, group});
}
int M = Integer.parseInt(br.readLine());
for (int i = 0; i < M; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String command = st.nextToken();
if (command.equals("recommend")) {
int group = Integer.parseInt(st.nextToken());
int x = Integer.parseInt(st.nextToken());
if (x == 1) {
sb.append(subtrees.get(group).last().no).append("\n");
} else {
sb.append(subtrees.get(group).first().no).append("\n");
}
} else if (command.equals("recommend2")) {
int x = Integer.parseInt(st.nextToken());
if (x == 1) {
sb.append(tree.last().no).append("\n");
} else {
sb.append(tree.first().no).append("\n");
}
} else if (command.equals("recommend3")) {
int x = Integer.parseInt(st.nextToken());
int level = Integer.parseInt(st.nextToken());
if (x == 1) {
Problem p = tree.ceiling(new Problem(0, level, 0));
sb.append(p == null ? -1 : p.no).append("\n");
} else {
Problem p = tree.lower(new Problem(0, level, 0));
sb.append(p == null ? -1 : p.no).append("\n");
}
} else if (command.equals("add")) {
int no = Integer.parseInt(st.nextToken());
int level = Integer.parseInt(st.nextToken());
int group = Integer.parseInt(st.nextToken());
Problem p = new Problem(no, level, group);
subtrees.get(group).add(p);
tree.add(p);
hMap.put(no, new int[]{level, group});
} else if (command.equals("solved")) {
int no = Integer.parseInt(st.nextToken());
if (!hMap.containsKey(no)) continue;
int[] info = hMap.get(no);
int level = info[0];
int group = info[1];
Problem p = new Problem(no, level, group);
hMap.remove(no);
tree.remove(p);
subtrees.get(group).remove(p);
}
}
System.out.println(sb.toString());
}
static class Problem implements Comparable<Problem> {
int no;
int level;
int group;
public Problem(int no, int level, int group) {
this.no = no;
this.level = level;
this.group = group;
}
@Override
public int compareTo(Problem o) {
if (level == o.level) {
return Integer.compare(no, o.no);
}
return Integer.compare(level, o.level);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Problem other = (Problem) obj;
return no == other.no && level == other.level && group == other.group;
}
@Override
public int hashCode() {
return Objects.hash(no, level, group);
}
}
}
๐ ๋ฌธ์ ๋งํฌ
21944 ๋ฌธ์ ์ถ์ฒ ์์คํ Version 2
โ๏ธ ์์๋ ์๊ฐ
1์๊ฐ ๋ฐ
โจ ์๋ ์ฝ๋
1. ๋ฌธ์
21939 ๋ฌธ์ ์ถ์ฒ ์์คํ Version 1์ ํ์ฅํ์ด๋ค.
๊ฐ ๋ฌธ์ ๋ง๋ค ๋ฌธ์ ๋ฒํธ, ๋์ด๋์ ์ด์ "์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ" ์ ๋ณด๊ฐ ์ถ๊ฐ๋์๋ค.
์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก, ๋ค์๊ณผ ๊ฐ์ 5๊ฐ์ง ๋ช ๋ น์ด๋ฅผ ์ง์ํ๋ ๋ฌธ์ ์ถ์ฒ ์์คํ ์ ์์ฑํ๋ผ.
์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฌธ์ ๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ๊ทธ ์คย ๋ฌธ์ ๋ฒํธ๊ฐ ํฐ ๊ฒ์ผ๋ก ์ถ๋ ฅํ๋ค.โ
๐ฅ๊ฐ -1์ธ ๊ฒฝ์ฐ ์ถ์ฒ ๋ฌธ์ ๋ฆฌ์คํธ์์ ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ๊ฐย ๐บ์ธ ๋ฌธ์ ์ค ๊ฐ์ฅ ์ฌ์ด ๋ฌธ์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ค.
์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฌธ์ ๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ๊ทธ ์คย ๋ฌธ์ ๋ฒํธ๊ฐ ์์ ๊ฒ์ผ๋ก ์ถ๋ ฅํ๋ค.
ํด๋น ๋ช ๋ น์ด๋ ํด๋น ๊ทธ๋ฃนย ๐บ์ ๋ฌธ์ ๋ฒํธ๊ฐ ํ ๊ฐ ์ด์์ด ์์ ๊ฒฝ์ฐ์๋ง ์ฃผ์ด์ง๋ค.
์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฌธ์ ๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ๊ทธ ์คย ๋ฌธ์ ๋ฒํธ๊ฐ ํฐ ๊ฒ์ผ๋ก ์ถ๋ ฅํ๋ค.โ
๐ฅ๊ฐ -1์ธ ๊ฒฝ์ฐ ์ถ์ฒ ๋ฌธ์ ๋ฆฌ์คํธ์์ ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ ์๊ด์์ดย ๊ฐ์ฅ ์ฌ์ด ๋ฌธ์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ค.
์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฌธ์ ๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ๊ทธ ์คย ๋ฌธ์ ๋ฒํธ๊ฐ ์์ ๊ฒ์ผ๋ก ์ถ๋ ฅํ๋ค.
์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฌธ์ ๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ๊ทธ ์คย ๋ฌธ์ ๋ฒํธ๊ฐ ์์ ๊ฒ์ผ๋ก ์ถ๋ ฅํ๋ค.
๋ง์ฝ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฌธ์ ๋ฒํธ๊ฐ ์๋ค๋ฉดย -1์ ์ถ๋ ฅํ๋ค.โ
๐ฅ๊ฐ -1์ธ ๊ฒฝ์ฐ ์ถ์ฒ ๋ฌธ์ ๋ฆฌ์คํธ์์ ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ ์๊ด์์ด ๋์ด๋ย ๐ฟ๋ณด๋ค ์์ ๋ฌธ์ ์ค ๊ฐ์ฅ ์ด๋ ค์ด ๋ฌธ์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ค.
์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฌธ์ ๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ๊ทธ ์คย ๋ฌธ์ ๋ฒํธ๊ฐ ํฐ ๊ฒ์ผ๋ก ์ถ๋ ฅํ๋ค.
๋ง์ฝ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฌธ์ ๋ฒํธ๊ฐ ์๋ค๋ฉดย -1์ ์ถ๋ ฅํ๋ค.
์ ํ
2. ํ์ด
Database๋ผ๋ ์ด๋ฆ์ ์ปค์คํ ํด๋์ค๋ฅผ ์ ์ํด ์ฌ์ฉํ๋ค.
ํด๋น ํด๋์ค์๋ Recommend1(), Recommend2(), Recommend3(), Add(), Solved() ๋ฉ์๋๊ฐ ์กด์ฌํด ๊ฐ๊ฐ์ Command์ ๋์ํ๋ค.
์ฃผ์ด์ง๋ N๊ฐ์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ค์ Add()๋ฅผ ํตํด ์ ์ฅํ ๋ค, M๊ฐ์ ๋ช ๋ น์ด๋ฅผ ๊ฐ๊ฐ์ ์ปค๋งจ๋์ ๋ง๊ฒ ํธ์ถํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก Database ํด๋์ค๋ 3๊ฐ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ฐ๋๋ค.
ProblemByLevel
setProblemByLevelAndGroup
setProblems
๋ฐฐ์ด์ฐธ๊ณ ๋ก set์ ์ฌ์ฉํ ์ด์ ๋ ๊ฐ๊ฐ์ ๋ช ๋ น์ด๋ค์ด "์ต๋/์ต์ ๋ฌธ์ ๋ฒํธ", "๊ฐ์ฅ ์ด๋ ค์ด/์ฌ์ด ๋์ด๋" ๋ฑ์ ์ง์์ ์ผ๋ก ์๊ตฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
c++์์ set์ "์ด์ง ๊ฒ์ ํธ๋ฆฌ"๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ์ ๋ ฌ๋ ์ํ๋ฅผ ์ ์งํ๋ค.
Add()
๋ฉ์๋๋ ๋ฌธ์ ๋ฒํธ P, ๋ฌธ์ ๋์ด๋ L, ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ G ์ ๋ณด๋ฅผ ๋๊ฒจ๋ฐ์ ๊ฐ๊ฐ์ ์๋ฃ๊ตฌ์กฐ์ ๋ง๊ฒ ์ ์ฅํ๋ค.Solved()
๋ฉ์๋๋ ๋ฌธ์ ๋ฒํธ P๋ฅผ ๋๊ฒจ๋ฐ์ProblemByLevel
set,ProblemByLevelAndGroup
set์ ์ ์ฅ๋ ๋ฌธ์ ์ ๋ณด๋ฅผ ์ ๊ฑฐํ๋ค.์ฃผ์ด์ง ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ G์์ ๊ฐ์ฅ ์ด๋ ค์ด/์ฌ์ด ๋ฌธ์ ๋ฒํธ๋ฅผ ๋ฐํํ๋ ํจ์์ด๋ค.
x๊ฐ 1์ด๋ฉด
Recommend1P()
๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ณ , -1์ด๋ฉดRecommend1N()
๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.๋ชจ๋ ๋ฌธ์ ์ ๋ํด์ ๊ฐ์ฅ ์ด๋ ค์ด/์ฌ์ด ๋ฌธ์ ๋ฒํธ๋ฅผ ๋ฐํํ๋ ํจ์์ด๋ค. ์์ ๋์ผํ๊ฒ x == 1์ด๋ฉด P, -1์ด๋ฉด N์ ํธ์ถํ๋ค.
์ฃผ์ด์ง ๋์ด๋ L๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์/์์ ๋ฌธ์ ๋ค ์ค์์ ๊ฐ์ฅ ์์/ํฐ ๋ฌธ์ ๋ฒํธ๋ฅผ ๋ฐํํ๋ ํจ์์ด๋ค.
์ ์ฒด ์ฝ๋
C++
๐ ์๋กญ๊ฒ ์๊ฒ๋ ๋ด์ฉ
์ง๋ 49๋ฒ PR์ ์ฝ๊ฐ ํ์ฅ๋ ๋ฒ์ ์ด๋ผ ์์ํ๊ฒ ํ ์ ์์ ๊ฒ ๊ฐ์์ผ๋... ๊ดํ ์๋ ๋น ๋ฅด๊ฒ ํด๋ณด๊ฒ ๋ค๊ณ ๋ณต์กํ๊ฒ ์ ๊ทผํ๋ค๊ฐ ๋ํต ์๊ฐ ๋ ๋ฆฌ๊ณ ์ฒ์๋ถํฐ ๊ฐ์์๋ ๊ฒ๋ง ๋ช ๋ฒ ํ๋์ง ๋ชจ๋ฅด๊ฒ ๋ฐ...
์ฌ์ง์ด ์ฒ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํด์ผํ๋ ์ถ์ ๊ฒ๋ค๋ ์ฐพ์๋ณด๋ ๋จ์ํ๊ฒ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์๋ฃจ๋ฃฉ ํ๋ฉด ํด๊ฒฐ๋๋ ๊ฑฐ ๋ณด๊ณ ์ข ํํํด์ง... ใ ใ