๊ธฐ๋ก๋ฐฉ

Lv.2 : [1์ฐจ] ์บ์‹œ ๋ณธ๋ฌธ

CodingTest/Java

Lv.2 : [1์ฐจ] ์บ์‹œ

Soom_1n 2023. 11. 1. 09:48

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ์บ์‹œ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ LRU (Least Recently Used)๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

๐Ÿ”ธ ๋ฌธ์ œ ํ’€์ด ๐Ÿ”ธ

  • ํฌ๊ธฐ ์ œํ•œ์ด ์žˆ๋Š” ํ ํ˜•ํƒœ์—์„œ ๊ฐ€์žฅ ์‚ฌ์šฉํ•œ์ง€ ์˜ค๋ž˜ ๋œ ๋„์‹œ ์ด๋ฆ„์„ ๋จผ์ € ์ง€์›Œ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.
  • cache hit์ผ ๊ฒฝ์šฐ๋Š” ํ•ด๋‹น ๋„์‹œ ์ด๋ฆ„์„ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์‚ฌ์šฉํ•œ ๊ฒƒ์œผ๋กœ ์˜ฎ๊ฒจ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • ๋„์‹œ ์ด๋ฆ„์ด ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๊ณ , cacheSize๊ฐ€ 0์ด ๋  ์ˆ˜ ์žˆ์Œ์— ์œ ์˜ํ•œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.util.ArrayDeque;
import java.util.Queue;

class Solution {
    public int solution(int cacheSize, String[] cities) {
        Queue<String> que = new ArrayDeque<>();

		int answer = 0;

		for (String city : cities) {

			city = city.toLowerCase();

			if (que.contains(city)) {
				que.remove(city);
				que.add(city);
				answer += 1;
			} else {
				answer += 5;

				que.add(city);
				if (que.size() > cacheSize)
					que.poll();
			}
		}

		return answer;
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ํ์— ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด answer์— +1, ์—†๋‹ค๋ฉด +5 ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
    • ํฌํ•จ๋˜์–ด ์žˆ์„๋•Œ ํ์—์„œ ํ•ด๋‹น์›์†Œ๋ฅผ ์ง€์šฐ๊ณ  ๋‹ค์‹œ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐ€์žฅ ์ตœ๊ทผ ์‚ฌ์šฉ์œผ๋กœ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.
    • ์›์†Œ๊ฐ€ ์—†์„ ์‹œ์—๋Š” ํ์— ์ถ”๊ฐ€ํ•˜๊ณ , ํ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ œํ•œ ํฌ๊ธฐ๋ฅผ ๋„˜์—ˆ์„๋•Œ๋Š” ๊ฐ€์žฅ ์•ž ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ํ๋ฅผ ์ด์šฉํ•ด์„œ ๋‹จ์ˆœํžˆ ๊ตฌํ˜„ํ–ˆ์ง€๋งŒ contains()์—์„œ ์„ ํ˜•ํƒ์ƒ‰์ด ์ด๋ค„์ง€๋ฏ€๋กœ ๊ทธ๋‹ฅ ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋Š” ์•„๋‹Œ ๊ฒƒ ๊ฐ™๋‹ค.
    • HashMap์—์„œ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฒ•์„ ๋ชฐ๋ž๋Š”๋ฐ, ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ๋ณด๋‹ˆ LinkedHashMap์„ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•œ๊ฑธ ๋ณด๊ณ  ์ƒˆ๋กœ ์•Œ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค.
    • LinkedHashMap์€ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋Š” HashMap์ธ๋ฐ, ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•์€ ๋˜‘๊ฐ™๊ณ  ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ ์šฉํ•ด์„œ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ์›์†Œ๋Š” head์ด๊ณ , ์ตœ๊ทผ ์›์†Œ๋Š” tail์— ์ €์žฅ๋œ๋‹ค.
    • ํŠน๋ณ„ํ•œ ๊ธฐ๋Šฅ์œผ๋กœ๋Š” removeEldestEntry() ๋ฉ”์„œ๋“œ๋กœ ์กฐ๊ฑด์„ ํ†ตํ•ด head๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ์—ฌ๊ธฐ์„œ๋Š” size๊ฐ€ cacheSize๊ฐ€ ๋˜๋ฉด ture๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.
  • ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์กฐ๊ฑด์—์„œ ํ•œ ๋ฒˆ, ์ตœ๊ทผ ์‚ฌ์šฉํ•œ ์›์†Œ๋ฅผ ์•ž์œผ๋กœ ๋‹น๊ฒจ์ค˜์•ผํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ํ•œ ๋ฒˆ์”ฉ ํ‹€๋ ธ๋‹ค.
    • ๋ฌธ์ œ ์กฐ๊ฑด์„ ๋” ๊ผผ๊ผผํžˆ๋ณด๊ณ  ๋ถ„์„ํ•ด์•ผํ•  ํ•„์š”๋ฅผ ๋Š๊ผˆ๋‹ค.
  • ์˜ค๋žœ๋งŒ์— ์ฝ”ํ…Œ๋ฅผ ๋‹ค์‹œ ํ’€๊ธฐ ์‹œ์ž‘ํ•˜๋Š”๋ฐ ์ข‹์€ ์žฌํ™œ์น˜๋ฃŒ(?)๊ฐ€ ๋œ ๋ฌธ์ œ์ด๋‹ค. ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ๋œ ๊ฐœ๋…๋„ ํฐ ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

728x90

'CodingTest > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Lv.2 : ๊ธฐ๋Šฅ๊ฐœ๋ฐœ  (0) 2023.11.02
BOJ_1418 : K-์„ธ์ค€์ˆ˜  (0) 2023.11.01
Lv.2 : ํ–‰๋ ฌ์˜ ๊ณฑ์…ˆ  (0) 2023.10.17
Lv.2 : ํ• ์ธ ํ–‰์‚ฌ  (0) 2023.10.01
Lv.2 : n^2 ๋ฐฐ์—ด ์ž๋ฅด๊ธฐ  (0) 2023.09.23