๋ณธ ๋ฌธ์ ๋ ๋์ ๋ฌธ์์ด์ด ๋ฌธ์์ด ์งํฉ ๋ด์ ์๋์ง ์ผ์ผ์ด ๊ฒ์ฌํด๋ณด๋ ์๋ฐ์ ์๋ค.
์ฒ์์๋ ๋ค์๊ณผ ๊ฐ์ด O(N*M)
์ผ๋ก ํ์๋ค. ์๊ฐ ์ ํ์ด 2์ด์ด๊ณ ,
N
๊ณผ M
์ ์ต๋๊ฐ์ 10000
์ด๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ์์๋ค.
String S = new String[N];
for (int i = 0; i < N; i++) S[i] = br.readLine();
int ans = 0;
for (int i = 0; i < M; i++) {
String s = br.readLine();
for (int j = 0; j < N; j++) {
if (s.equals(S[j])) ans ++;
}
}
์ด ๋ ๋ต์ ๋ง์์ผ๋ ์๊ฐ ํจ์จ์ด ์ข์ง ์์ ๊ฒ ๊ฐ์ ๋ค๋ฅธ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์๊ณ , Java Collections์ HashSet์ ์ด์ฉํ๋ฉด ์๊ฐ ๋ณต์ก๋๋ฅผ ํฌ๊ฒ ์ค์ผ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
HashSet์ Add
, Contains
์ฐ์ฐ์ ์๊ฐ ๋ณต์ก๋๋ ๋ชจ๋ O(1) ์ด๋ค.
๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ ์ข์ ์ฝ๋๊ฐ ๋ ์ ์๊ฒ ์ง !!
HashSet<String> hs = new HashSet<>();
while (N-- > 0) hs.add(br.readLine());
int ans = 0;
for (int i = 0; i < M; i++)
if (hs.contains(br.readLine())) ans ++;
์๊ฐ ๋ณต์ก๋๋ฅผ 2648ms
์์ 424ms
๋ก ์ค์ผ ์ ์๋ค.