๐Ÿงฉ Algorithm/[Programmers] Level 1

[Programmers] L1. ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฐ™์€ ๊ธ€์ž (Python)

devCloud 2024. 11. 6. 12:50
728x90

[๋ฌธ์ œ ๋งํฌ] ๐Ÿ‘‡

 

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

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

programmers.co.kr


ํ’€์ด

1๏ธโƒฃ ๋ฌธ์ž์—ด ๊ธธ์ด ๋งŒํผ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆฐ๋‹ค.

 

2๏ธโƒฃ ๋ฌธ์ž์—ด ์ค‘ ํ˜„์žฌ ์œ„์น˜ ์ „๊นŒ์ง€ ์Šฌ๋ผ์ด์‹ฑ ํ•œ ํ›„, ํ˜„์žฌ ๋ฌธ์ž๊ฐ€ ์Šฌ๋ผ์ด์‹ฑ ํ•œ ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. 

if s[i] not in s[:i]:
	...
else:
	...
  • ๋ฌธ์ž not in ๋ฆฌ์ŠคํŠธ : ๋ฌธ์ž๊ฐ€ ๋ฆฌ์ŠคํŠธ์— ์—†์œผ๋ฉด True ๋ฅผ ๋ฐ˜ํ™˜
  • ๋ฌธ์ž in ๋ฆฌ์ŠคํŠธ : ๋ฌธ์ž๊ฐ€ ๋ฆฌ์ŠคํŠธ์— ์žˆ์œผ๋ฉด True ๋ฅผ ๋ฐ˜ํ™˜

 

3๏ธโƒฃ ์—†์œผ๋ฉด -1์„ ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๊ณ , ์žˆ์œผ๋ฉด ๋ฌธ์ž์—ด์—์„œ ํ˜„์žฌ ์œ„์น˜ ์ด์ „๋ถ€ํ„ฐ ๋งจ ์•ž๊นŒ์ง€ ๊ฑฐ๊พธ๋กœ ํ™•์ธํ•œ๋‹ค. 

for j in s[i-1::-1]:
  • ๋ฆฌ์ŠคํŠธ[start:end:step] : step ์— -1 ์„ ๋„ฃ์œผ๋ฉด ๋’ค์—์„œ๋ถ€ํ„ฐ ์Šฌ๋ผ์ด์‹ฑ์„ ํ•œ๋‹ค.

 

4๏ธโƒฃ ๋’ค์—์„œ๋ถ€ํ„ฐ ํ™•์ธํ•˜๋ฉด์„œ ์นด์šดํŠธ ํ•˜๊ณ , ํ˜„์žฌ ์œ„์น˜์™€ ๊ฐ™์€ ๋ฌธ์ž๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด ํ˜„์žฌ ๋ฃจํ”„๋ฅผ ์ค‘๋‹จํ•œ๋‹ค.

 

5๏ธโƒฃ ๊ทธ๋ฆฌ๊ณ  ์นด์šดํŠธ ๊ฐ’์„ ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•œ๋‹ค.

 

Solution

def solution(s):
    answer = []
    for i in range(len(s)):
        cnt = 0
        if s[i] not in s[:i]:
            answer.append(-1)
        else:
            for j in s[i-1::-1]:
                cnt += 1
                if s[i] == j:
                    break
            answer.append(cnt)
    return answer

 

 

๊ฐœ์„ ํ•  ์ 

์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋Š” ๊ฐ ๋ฌธ์ž์˜ ์ด์ „ ๋“ฑ์žฅ ์œ„์น˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด ๋’ค๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ cnt๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ์žˆ๋‹ค. ํ˜„์žฌ ์ฝ”๋“œ๋„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜์ง€๋งŒ, s์˜ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด์งˆ ๊ฒฝ์šฐ ์„ฑ๋Šฅ์ƒ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์ด์ „ ๋“ฑ์žฅ ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•ด๋‘๊ณ  ๋ฐ”๋กœ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • ๊ฐ ๋ฌธ์ž์˜ ์ด์ „ ๋“ฑ์žฅ ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ๋ฌธ์ž์—ด์„ ํ•œ ๋ฒˆ ์ˆœํšŒํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ”๋กœ๋ฐ”๋กœ ์ด์ „ ๋“ฑ์žฅ ์œ„์น˜๋ฅผ ํ™•์ธํ•˜๋„๋ก ํ•œ๋‹ค.
  • ๋งค ๋ฌธ์ž๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ ํ•ด๋‹น ๋ฌธ์ž๊ฐ€ ์ด์ „์— ๋“ฑ์žฅํ•œ ์ ์ด ์—†๋‹ค๋ฉด -1์„, ์ด์ „์— ๋“ฑ์žฅํ•œ ์œ„์น˜๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ ์œ„์น˜์™€ ํ˜„์žฌ ์œ„์น˜์˜ ์ฐจ์ด๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ answer์— ์ถ”๊ฐ€ํ•œ๋‹ค.

 

๊ฐœ์„ ํ•œ ์ฝ”๋“œ

def solution(s):
    answer = []
    last_seen = {}  # ๊ฐ ๋ฌธ์ž์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ
    
    for i, char in enumerate(s):
        if char in last_seen:
            # ์ด์ „์— ๋“ฑ์žฅํ–ˆ๋‹ค๋ฉด, ํ˜„์žฌ ์œ„์น˜์™€ ์ด์ „ ์œ„์น˜์˜ ์ฐจ์ด๋ฅผ ๊ณ„์‚ฐ
            answer.append(i - last_seen[char])
        else:
            # ์ด์ „์— ๋“ฑ์žฅํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด -1 ์ถ”๊ฐ€
            answer.append(-1)
        # ํ˜„์žฌ ์œ„์น˜๋ฅผ ๋งˆ์ง€๋ง‰ ์œ„์น˜๋กœ ๊ฐฑ์‹ 
        last_seen[char] = i
    
    return answer
  • last_seen ๋”•์…”๋„ˆ๋ฆฌ๋Š” ๊ฐ ๋ฌธ์ž์˜ ๋งˆ์ง€๋ง‰ ๋“ฑ์žฅ ์œ„์น˜๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ๊ฐ ๋ฌธ์ž์˜ ์ธ๋ฑ์Šค๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ, ๋”•์…”๋„ˆ๋ฆฌ์—์„œ ์ด์ „ ๋“ฑ์žฅ ์œ„์น˜๋ฅผ ํ™•์ธํ•˜์—ฌ ํ•„์š”ํ•œ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฐ”๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฌธ์ž์—ด์„ ํ•œ ๋ฒˆ๋งŒ ์ˆœํšŒํ•˜๋ฉด์„œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(n)์œผ๋กœ ์ค„์–ด๋“ค์–ด ํšจ์œจ์„ฑ์ด ๋†’์•„์ง„๋‹ค.

 


 

728x90