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

2023. 2. 7. 13:56ใ†์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค_2023

728x90

๋ฌธ์ œ ์„ค๋ช…

๋ฌธ์ž์—ด 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]

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1
์ง€๋ฌธ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2
์„ค๋ช… ์ƒ๋žต

 

 

๋‚˜์˜ ํ’€์ด

public int[] solution(String s) {
   int[] answer = new int[s.length()];
   
   HashMap<String, Integer> map = new HashMap<>();
   String[] split = s.split("");
   
   for (int i = 0; i< split.length; i++)
   {
      Integer integer = map.get(split[i]);
      if (integer == null) {
         answer[i] = -1;
      }else {
         answer[i] = i - integer;
      }
      map.put(split[i], i);
   }
   return answer;
}

๋‚˜๋Š” ์šฐ์„  HashMap์—๋‹ค๊ฐ€ key ๊ฐ’์œผ๋กœ ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์„ ์ชผ๊ฐ  ๊ฐ’์„ ๋‹ด๊ณ , ๊ทธ ๋ฌธ์ž์—ด์˜ ์œ„์น˜๋ฅผ ๋‹ด์•„์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค. 

 

์šฐ์„  ๋ฌธ์ž์—ด์„ ์ชผ๊ฐœ์ฃผ๊ณ , ๋งŒ์•ฝ map์—์„œ key ๋กœ ๊บผ๋ƒˆ์„ ๋•Œ integer ๊ฐ€ null์ด๋ฉด ์ฒซ๋ฒˆ์งธ ๊ธ€์ž๋ผ๋Š” ๋œป์ด๊ธฐ ๋•Œ๋ฌธ์— answer ๋ฐฐ์—ด์—๋Š” -1์„ ๋„ฃ์–ด์ฃผ๊ณ ,

 

๋งŒ์•ฝ null ์ด ์•„๋‹ˆ๋ผ๋ฉด ์ฒซ๋ฒˆ์งธ ๊ธ€์ž๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๋œป์ด๊ธฐ ๋•Œ๋ฌธ์— answer์— ์ชผ๊ฐ  ๋ฌธ์ž์—ด์˜ ์œ„์น˜์ธ i์™€ map์—์„œ ๊บผ๋‚ธ ์œ„์น˜ i๋ฅผ ๋บ€ ๊ฐ’์„ ๋„ฃ์–ด์คฌ๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ banana์ฒ˜๋Ÿผ a๊ฐ€ ๋‘๋ฒˆ์งธ, 4๋ฒˆ์งธ์— ์œ„์น˜ํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•ด์„œ map์—๋Š” ๋งˆ์ง€๋ง‰ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋„๋ก ํ–ˆ๋‹ค. 

 

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด

public int[] otherSolution(String s)
{
   int[] answer = new int[s.length()];
   
   HashMap<Character, Integer> map = new HashMap<>();
   for (int i =0; i< s.length(); i++)
   {
      char c = s.charAt(i);
      answer[i] = i - map.getOrDefault(c, i + 1);
      map.put(c, i);
   }
   
   return answer;
}

๋‚˜๋ž‘ ๋ฐฉ์‹ HashMap์„ ์‚ฌ์šฉํ•ด์„œ ๋น„์Šทํ•˜๊ฒŒ ํ–ˆ๋Š”๋ฐ Character๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ‘ผ ํ’€์ด๊ฐ€ ์žˆ์–ด์„œ ๊ฐ€์ ธ์™”๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” getOrDefault๋ฅผ ๊ธฐ์–ต ๋ชปํ•ด์„œ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ๋กœ ํ–ˆ๋Š”๋ฐ... ์ด๊ฑธ ์•Œ์•˜๋”๋ผ๋ฉด ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ์„ ๊ฒƒ์ด๋‹ค ใ… ใ…  

 

 

๐Ÿ‘พ getOrDefault (key, DefaultValue) 

: ์ฐพ๋Š” ํ‚ค๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ์ฐพ๋Š” ํ‚ค์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์—†๋‹ค๋ฉด ๊ธฐ๋ณธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ 

key - ๊ฐ’์„ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š” ์š”์†Œ์˜ ํ‚ค 

defaultValue - ์ง€์ •๋œ ํ‚ค๋กœ ๋งคํ•‘๋œ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ ๋ฐ˜ํ™˜๋˜์–ด์•ผ ํ•˜๋Š” ๊ธฐ๋ณธ๊ฐ’ 

 

getOrDefault๋ฅผ ์‚ฌ์šฉํ•ด์„œ c ๋ฌธ์ž์—ด์ด ์žˆ์œผ๋ฉด ๊ทธ ๋ฌธ์ž์—ด ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  i - 1 ๊ฐ’์„ answer์— ๋„ฃ์–ด์ฃผ์ง€๋งŒ, 

๋งŒ์•ฝ ์—†๋‹ค๋ฉด i+1 ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๊ทธ ๊ฐ’์„ i์™€ ๋นผ์ค€๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90