๊ธฐ๋ก๋ฐฉ

Lv.2 : ์••์ถ• ๋ณธ๋ฌธ

CodingTest/Java

Lv.2 : ์••์ถ•

Soom_1n 2023. 11. 9. 09:37

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

 

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

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

programmers.co.kr



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

  • ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ LZW๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๋ช…์— ๋”ฐ๋ผ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.
  • ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋งŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

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

  • ์ƒ‰์ธ๋˜๋Š” ๋ฌธ์ž์—ด๋“ค์€ ๊ทธ ๊ฐ’์„ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค.
  • ์ƒ‰์ธ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ž์—ด์„ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

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

import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;

class Solution {
    public int[] solution(String msg) {
        // ์‚ฌ์ „ ์ดˆ๊ธฐํ™”
        Map<String, Integer> map = new HashMap<>();

        for (int i = 0; i < 26; i++) {
            map.put((char)('A' + i) + "", i + 1);
        }

        // ์ธ๋ฑ์‹ฑ
        List<Integer> list = new ArrayList<>();

        for (int i = 0; i < msg.length(); i++) {
            int len = 1;
            while (i + len <= msg.length() && map.containsKey(msg.substring(i, i + len))) {
                len++;
            }

            list.add(map.get(msg.substring(i, i + len - 1)));

            if (i + len <= msg.length())
                map.put(msg.substring(i, i + len), map.size() + 1);

            i += len - 2;
        }

        // ์ถœ๋ ฅ
        int[] answer = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i);
        }
        return answer;
    }
}

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

  • ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž 26๊ฐœ๋ฅผ map์— ์ €์žฅํ•ด๋‘”๋‹ค.
  • ์ƒ‰์ธ๋˜์ง€ ์•Š์„๋•Œ ๊นŒ์ง€ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๋Š˜๋ ค๊ฐ„๋‹ค.
    • ๋งˆ์ง€๋ง‰์œผ๋กœ ์ƒ‰์ธ๋œ ๊ฐ’์„ list์— ์ €์žฅํ•œ๋‹ค.
    • ์ƒ‰์ธ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์€ ์ƒˆ๋กญ๊ฒŒ ์ƒ‰์ธ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
    • ์ƒ‰์ธ๋œ ๊ฐ’ ์ดํ›„๋กœ ๋‹ค์‹œ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๊ณ„์‚ฐํ•œ๋‹ค.
  • list์— ์ €์žฅ๋œ ๊ฐ’๋“ค์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • LZW๋ผ๋Š” ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฌธ์ œ์—ฌ์„œ, ๋ฌธ์ œ ์„ค๋ช…๋Ÿ‰์„ ๋ณด๊ณ  ์–ด๋ ต์ง€ ์•Š์„๊นŒ ํ–ˆ๋Š”๋ฐ ์ƒ๊ฐ๋ณด๋‹จ ๊ฐ„๋‹จํ–ˆ๋‹ค.
    • ์ตœ๋Œ€๊ธธ์ด ๋ฌธ์ž์—ด์„ ๊ตฌํ•  ๋•Œ, ๋ฌธ์ž์—ด์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜ˆ์™ธ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์•„์„œ ๋””๋ฒ„๊น…์ด ํ•„์š”ํ–ˆ๋‹ค.
  • 2018 KAKAO RECRUITMENT์˜ 2๋ฒˆ ๋ฌธ์ œ์ด๊ณ  ์ •๋‹ต๋ฅ ์€ 95.80%๋กœ ์‰ฌ์šด ๋‚œ์ด๋„์ธ ๊ฒƒ ๊ฐ™๋‹ค.
    • ๋‹ค์Œ์€ ๊ณต์‹ ํ•ด์„ค ๋‚ด์šฉ์ด๋‹ค. 
GIF ํŒŒ์ผ ๋“ฑ์—์„œ ์‹ค์ œ๋กœ ์“ฐ์ด๋Š” LZW ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๋ช…ํ•ด์ฃผ๊ณ , ๊ตฌํ˜„ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์“ฐ์ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•ด๋ณด๋Š” ๊ฒƒ์ด ์–ด๋– ์…จ๋‚˜์š”? ์••์ถ•์ด๋ผ๋Š” ๋ง๋งŒ์œผ๋กœ ์–ผํ• ์–ด๋ ค์›Œ ๋ณด์ด์ง€๋งŒ, ์„ค๋ช…์— ๋‚˜์˜จ ์˜์‚ฌ์ฝ”๋“œPseudocode๋ฅผ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผ์„œ ๊ตฌํ˜„๋งŒ ํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ๋กœ, ๊ธฐ์ดˆ์ ์ธ ๋ฌธ์ž์—ด๊ณผ ๋ฐฐ์—ด์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
์ด ๋ฌธ์ œ์˜ ์ •๋‹ต๋ฅ ์€ 95.80%์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋งŽ์€ ์ง€์›์ž๊ฐ€ ์ž˜ ํ’€์–ด์ฃผ์…จ์Šต๋‹ˆ๋‹ค. ์–ธ์–ด๋ณ„๋กœ๋Š” Java ์–ธ์–ด ์‚ฌ์šฉ์ž๋“ค์ด ์กฐ๊ธˆ ์–ด๋ ค์›Œํ–ˆ์Šต๋‹ˆ๋‹ค.

 

728x90