๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด(Java)

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค_๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฐ™์€ ๊ธ€์ž

by carrot0911 2024. 12. 9.

๋ฌธ์ œ ์„ค๋ช…

https://school.programmers.co.kr/learn/courses/30/lessons/142086?language=java

 

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

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

๋ฌธ์ž์—ด s๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, s์˜ ๊ฐ ์œ„์น˜๋งˆ๋‹ค ์ž์‹ ๋ณด๋‹ค ์•ž์— ๋‚˜์™”์œผ๋ฉด์„œ, ์ž์‹ ๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณณ์— ์žˆ๋Š” ๊ฐ™์€ ๊ธ€์ž๊ฐ€ ์–ด๋”” ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, s="banana"๋ผ๊ณ  ํ•  ๋•Œ,  ๊ฐ ๊ธ€์ž๋“ค์„ ์™ผ์ชฝ๋ถ€ํ„ฐ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ฝ์–ด ๋‚˜๊ฐ€๋ฉด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • b๋Š” ์ฒ˜์Œ ๋‚˜์™”๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹ ์˜ ์•ž์— ๊ฐ™์€ ๊ธ€์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” -1๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • a๋Š” ์ฒ˜์Œ ๋‚˜์™”๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹ ์˜ ์•ž์— ๊ฐ™์€ ๊ธ€์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” -1๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • n์€ ์ฒ˜์Œ ๋‚˜์™”๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹ ์˜ ์•ž์— ๊ฐ™์€ ๊ธ€์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” -1๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • a๋Š” ์ž์‹ ๋ณด๋‹ค ๋‘ ์นธ ์•ž์— a๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” 2๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • n๋„ ์ž์‹ ๋ณด๋‹ค ๋‘ ์นธ ์•ž์— n์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” 2๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • a๋Š” ์ž์‹ ๋ณด๋‹ค ๋‘ ์นธ, ๋„ค ์นธ ์•ž์— a๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘ ๊ฐ€๊นŒ์šด ๊ฒƒ์€ ๋‘ ์นธ ์•ž์ด๊ณ , ์ด๋Š” 2๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ์€ [-1, -1, -1, 2, 2, 2]๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
๋ฌธ์ž์—ด s์ด ์ฃผ์–ด์งˆ ๋•Œ, ์œ„์™€ ๊ฐ™์ด ์ •์˜๋œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜ solution์„ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. 

์ œํ•œ ์‚ฌํ•ญ

  • 1 ≤ s์˜ ๊ธธ์ด ≤ 10,000
    • s๋Š” ์˜์–ด ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

s result
"banana" [-1, -1, -1, 2, 2, 2]
"foobar" [-1, -1, 1, -1, -1, -1]

 

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ

import java.util.*;

class Solution {
    public int[] solution(String s) {
        int[] answer = new int[s.length()];

        Map<Character, Integer> map = new HashMap<>();
        
        for (int i = 0; i < s.length(); i++) {
            
            if (!map.containsKey(s.charAt(i))) {
                answer[i] = -1;
                map.put(s.charAt(i), i);
            } else {
                answer[i] = i - map.get(s.charAt(i));
                map.put(s.charAt(i), i);
            }
        }
        
        return answer;
    }
}

์ฝ”๋“œ ์„ค๋ช…

  • int[ ] answer = new int[s.length( )] : ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด answer๋ฅผ ๊ธธ์ด๊ฐ€ s.length์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
  • Map<Character, Integer> map = new HashMap<>( ) : ๊ฐ ๋ฌธ์ž์˜ ๋งˆ์ง€๋ง‰ ๋“ฑ์žฅ ์œ„์น˜๋ฅผ ์ €์žฅํ•  HashMap์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
  • for (int i = 0; i < s.length( ); i++) { } : for๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ i๊ฐ€ 0๋ถ€ํ„ฐ s.length( )-1๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
    • if (!map.containKeys(s.charAt(i)) : if๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ํ˜„์žฌ ๋ฌธ์ž๊ฐ€ HashMap์— ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์‹คํ–‰ํ•œ๋‹ค.
      • answer[i] = -1 : answer์˜ i๋ฒˆ์งธ ์š”์†Œ๋ฅผ -1๋กœ ์ €์žฅํ•œ๋‹ค.
      • map.put(s.charAt(i), i) : HashMap์— key๊ฐ€ s.charAt(i), value๊ฐ€ i์ธ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
    • else { } : ํ˜„์žฌ ๋ฌธ์ž๊ฐ€ HashMap์— ์กด์žฌํ•  ๊ฒฝ์šฐ ์‹คํ–‰ํ•œ๋‹ค.
      • answer[i] = i - map.get(s.charAt(i) : answer์˜ i๋ฒˆ์งธ ๊ฐ’์œผ๋กœ i์—์„œ HashMap์— ์ €์žฅ๋œ ํ˜„์žฌ ๋ฌธ์ž์˜ value๊ฐ’์„ ๋บ€ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
        • map.put(s.charAt(i), i) : HashMap์— key๊ฐ€ s.charAt(i), value๊ฐ€ i์ธ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.