๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Algorithm/์ฝ”๋”ฉํ…Œ์ŠคํŠธ

[Set & List] ์„ฑ๋Šฅ ์ฐจ์ด

by GroovyArea 2022. 10. 29.

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ค€๋น„ํ•˜๋ฉฐ ๋ฐฑ์ค€์„ ํ’€๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

https://www.acmicpc.net/problem/1920

 

1920๋ฒˆ: ์ˆ˜ ์ฐพ๊ธฐ

์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ N(1 ≤ N ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” N๊ฐœ์˜ ์ •์ˆ˜ A[1], A[2], …, A[N]์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” M(1 ≤ M ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” M๊ฐœ์˜ ์ˆ˜๋“ค์ด ์ฃผ์–ด์ง€๋Š”๋ฐ, ์ด ์ˆ˜๋“ค

www.acmicpc.net

๋ฐ”๋กœ ์ด ๋ฌธ์ œ์ธ๋ฐ์š”?

 

์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์ด๊ณ  ์‰ฝ๊ฒŒ ํ’€์—ˆ๋Š”๋ฐ, ๊ณ„์† ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚ฌ์—ˆ์Šต๋‹ˆ๋‹ค..

์›์ธ์ด ๋ฌด์—‡์ธ๊ณ , ํ•˜๊ณ  ๋ดค์Šต๋‹ˆ๋‹ค.

 

์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ

์ž…๋ ฅํ•œ ์ˆซ์ž ๋งŒํผ ์ •์ˆ˜๋ฅผ ๋ฐ›์•„์„œ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ €์žฅํ•˜๊ณ  contains๋กœ ๋น„๊ตํ•  ์ƒ๊ฐ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹น์—ฐํžˆ ์ •์ˆ˜์ด๋ฏ€๋กœ Integer๋กœ ์ œ๋„ค๋ฆญ์„ ์„ ์–ธํ–ˆ๋Š”๋ฐ, ์ด๊ฒŒ ๋ณ€ํ™˜๊ณผ์ •์—์„œ ์‹œ๊ฐ„์„ ์ข€ ์žก์•„๋จน์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์„ ๋ชปํ–ˆ๋„ค์š” ใ…Žใ…Ž

StringTokenizer st;

List<Integer> numbers = new ArrayList<>();
// String์„ ์ž…๋ ฅ ๊ฐ’์œผ๋กœ ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์—,

int N = Integer.parseInt(br.readLine());

st = new StringTokenizer(br.readLine());

for (int i = 0; i < N; i++) {
    String token = st.nextToken();
    numbers.add(Integer.parseInt(token)); // ์—ฌ๊ธฐ์„œ ํ•œ๋ฒˆ Wrapping์„ ํ•ด์ค˜์•ผ ํ•˜๋Š”๋ฐ, ์‹œ๊ฐ„์ด ๊ฑธ๋ฆผ.
}

 

๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ

๋‹จ์ˆœํžˆ List ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•ด์„œ contains ๋น„๊ต๋ฅผ ํ•  ์ƒ๊ฐ์ด์—ˆ๋Š”๋ฐ, ์ด๊ฒŒ ํ™”๊ทผ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

List์™€ Set์˜ ์ฐจ์ด๋Š” ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜๋ƒ, ์ค‘๋ณต ํ—ˆ์šฉ์ด๋ƒ ์ฐจ์ด์ธ๋ฐ ๊ฒฐ์ •์ ์œผ๋กœ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ๊ฒƒ์ด ์•„๋‹Œ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒŒ ๋ฌธ์ œ์˜ ์ž…๋ ฅ์ž…๋‹ˆ๋‹ค.

๋˜ Collection์˜ contains()๋Š” List Set ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(n), O(1) ์ด๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์งˆ ์ˆ˜๋ก ์—„์ฒญ๋‚œ ์†๋„ ์ฐจ์ด๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ์ ์„ ์ž˜ ์ˆ™์ง€ํ•˜๊ณ  ๋‹ค์Œ ๋ฌธ์ œ๋“ค์„ ๋งˆ์ฃผํ•ด๋ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

List<String> numbers2 = new ArrayList<>(); // ์ด๊ฒƒ์„ 
Set<String> numbers1 = new HashSet<>(); // ์ด๊ฒƒ์œผ๋กœ

 

๋ฐ˜์‘ํ˜•