문제 : boj3022
반복 로직만 잘 세우면 간단하게 풀 수 있다. 주의할 부분은 'If at any point a child takes a piece of food, and that child had already taken more food than the other children all together (not including the new piece of food),'에서 not including the new piece of food 부분이다. 즉, 현재 아이가 누군지는 알아야하지만 현재 집은것에 대해서는 카운티앟지 않은채로 수만 확인해야 한다.
따라서 현재까지 나온 아이의 총 수를 cnt, 현재 아이가 나왔던 횟수를 cc[아이이름] 이라고 해보자. 그럼 만약 현재 아이의 이름이 A라고 할 때, 'cnt-cc[A] < cnt[A]' 라면 엄마가 주의를 줘야하는 경우가 된다. 예제 입력 1을 약간 변형한 다음 예시를 확인해보자.
5
mirko
stanko
stanko
stanko
stanko
위의 예시일 경우 아래와 같이 진행해볼 수 있다. 좌측에서 우측으로 진행한다고 보면 된다. (입력 -> 엄마가 주의줘야함? -> 확인 후 변경). 그럼 이 경우 2번 주의를 줘야함을 알 수 있다.
이 과정을 코드로 구현하면 된다. 문자열에 대해 위와 같이 배열로 표현하려면 HashMap을 사용하면 된다.
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
public class Main {
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int cnt = 0;
HashMap<String, Integer> hm = new HashMap<>();
int ans = 0;
while (n-->0) {
String cur = br.readLine();
if (cnt-hm.getOrDefault(cur, 0) < hm.getOrDefault(cur, 0)) {
ans++;
}
cnt++;
hm.put(cur, hm.getOrDefault(cur, 0)+1);
}
System.out.println(ans);
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
백준 5568 자바 - 카드 놓기 (BOJ 5568 JAVA) (0) | 2022.03.16 |
---|---|
백준 18258 자바 - 큐 2 (BOJ 18258 JAVA) (0) | 2022.03.15 |
백준 6550 자바 - 부분 문자열 (BOJ 6550 JAVA) (0) | 2022.03.13 |
백준 6186 자바 - Best Grass (BOJ 6186 JAVA) (0) | 2022.03.12 |
백준 14472 자바 - 休憩スペース (Refreshment Area) (BOJ 14472 JAVA) (0) | 2022.03.11 |
댓글