๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/21149)
< Unread Messages >
๋ฌธ์ ํ์ด
HashMap์ ๋ง์ง๋ง์ผ๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ธ ์๊ฐ์ ์ ์ฅํ๋ค. ํ์ฌ ์๊ฐ์์ ๋ง์ง๋ง์ผ๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ธ ์๊ฐ์ ๋นผ๋ฉด ๊ทธ ์ฌ๋์ ์ฝ์ง ์์ ๋ฉ์์ง์ ๊ฐ์๋ฅผ ์ ์ ์๋ค.
* ๋ชจ๋ ์ฌ๋์ ์ฝ์ง ์์ ๋ฉ์์ง์ ์ดํฉ์ long ๋ฒ์์ด๋ค.
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.HashMap;
import java.util.StringTokenizer;
public class _21149_ { // Unread Messages
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());
long sum = 0;
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < m; i++) {
int s = Integer.parseInt(bf.readLine());
if (map.containsKey(s)) {
sum -= (i - map.get(s) - 1);
} else {
sum -= i;
}
map.put(s, i);
sum += (n - 1);
bw.write(sum + "\n");
}
bw.flush();
}
}
๋ณ์)
n, m : ๊ทธ๋ฃน์ ์ด ์ธ์์, ์ ์ก๋ ๋ฉ์์ง์ ๊ฐ์
sum : ๋ชจ๋ ์ฌ๋์ ์ฝ์ง ์์ ๋ฉ์์ง์ ์ดํฉ
map : HashMap <์ฌ๋ ๋ฒํธ, ๋ง์ง๋ง์ผ๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ธ ์๊ฐ>
๊ทธ๋ฃน์ ์ด ์ธ์ ์์ ์ ์ก๋ ๋ฉ์์ง์ ๊ฐ์๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค. ์ ์ก๋ ๋ฉ์์ง์ ๊ฐ์๋งํผ ๋ค์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
๊ฐ ๋ฉ์์ง๋ฅผ ๋ณด๋ธ ์ฌ๋์ ๋ฒํธ๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค. ๊ทธ ์ฌ๋์ด HashMap์ key๊ฐ์ผ๋ก ์๋ค๋ฉด sum - ( ํ์ฌ ์๊ฐ - ๋ง์ง๋ง์ผ๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ธ ์๊ฐ - 1)์ ํ๊ณ , key ๊ฐ์ผ๋ก ์๋ค๋ฉด sum -ํ์ฌ์๊ฐ์ ํ ํ HashMap์ ๊ฐ์ ์ ๋ฐ์ดํธํ๋ค. ๋ฉ์์ง๋ฅผ ๋ณด๋ธ ์ฌ๋์ ์ ์ธํ๊ณ ๋ ๋ฉ์์ง๊ฐ ํ๋์ฉ ์์์ผ๋ฏ๋ก sum + (n-1)์ ํ ํ sum ๊ฐ์ ์ถ๋ ฅํ๋ค.

'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Baekjoon] 6379_Scramble Sort (0) | 2025.11.05 |
|---|---|
| [Baekjoon] 29882_Ranking (0) | 2025.11.04 |
| [Baekjoon] 5741_Soccer League (0) | 2025.10.31 |
| [Baekjoon] 9794_Another Word Sorting (0) | 2025.10.30 |
| [Baekjoon] 4676_Haiku Review (0) | 2025.10.29 |