[Programmers] μ••μΆ•

Updated:

μ••μΆ•

μ••μΆ• 을 ν΄λ¦­ν•˜λ©΄ λ°”λ‘œ μ΄λ™ν•œλ‹€.

이 λ¬Έμ œλ„ μ˜ˆμ „μ— ν’€μ—ˆλ˜ [Programmers]Β κ΄„ν˜ΈΒ λ³€ν™˜ λ¬Έμ œμ™€ λΉ„μŠ·ν•˜λ‹€. 주어진 μ˜μ‚¬μ½”λ“œλ₯Ό κ΅¬ν˜„ ν•˜λ©΄ 됐닀.

  1. 길이가 1인 λͺ¨λ“  단어λ₯Ό ν¬ν•¨ν•˜λ„λ‘ 사전을 μ΄ˆκΈ°ν™”ν•œλ‹€.
  2. μ‚¬μ „μ—μ„œ ν˜„μž¬ μž…λ ₯κ³Ό μΌμΉ˜ν•˜λŠ” κ°€μž₯ κΈ΄ λ¬Έμžμ—΄ wλ₯Ό μ°ΎλŠ”λ‹€.
  3. w에 ν•΄λ‹Ήν•˜λŠ” μ‚¬μ „μ˜ 색인 번호λ₯Ό 좜λ ₯ν•˜κ³ , μž…λ ₯μ—μ„œ wλ₯Ό μ œκ±°ν•œλ‹€.
  4. μž…λ ₯μ—μ„œ μ²˜λ¦¬λ˜μ§€ μ•Šμ€ λ‹€μŒ κΈ€μžκ°€ λ‚¨μ•„μžˆλ‹€λ©΄(c), w+c에 ν•΄λ‹Ήν•˜λŠ” 단어λ₯Ό 사전에 λ“±λ‘ν•œλ‹€.
  5. 단계 2둜 λŒμ•„κ°„λ‹€.
  1. 이 λ¬Έμ œλŠ” μ˜μ–΄ λŒ€λ¬Έμžλ§Œ μ²˜λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— String λͺ¨λ“ˆμ„ 톡해 A-Z κΉŒμ§€ dict λ₯Ό μ΄ˆκΈ°ν™” ν•΄μ£Όμ—ˆλ‹€.

  2. ν˜„μž¬ λ¬Έμžμ—΄μ„ μ•žμ—μ„œ λΆ€ν„° ν•œ κΈ€μž, 두 κΈ€μž 늘렀 κ°€λ©° dict 에 μžˆλŠ”μ§€ 검사λ₯Ό ν•œ λ’€ μžˆλ‹€λ©΄ w 에 μ €μž₯ν•œλ‹€.

    λ§Œμ•½ μ—†λŠ” 경우 κ·ΈλŒ€λ‘œ μ’…λ£Œν•œλ‹€λ©΄ μ‚¬μ „μ—μ„œ ν˜„μž¬ μž…λ ₯κ³Ό μΌμΉ˜ν•˜λŠ” κ°€μž₯ κΈ΄ λ¬Έμžμ—΄ w λ₯Ό κ°€μ§€κ²Œ λœλ‹€.

  3. _dict[w] λ₯Ό 톡해 색인 번호λ₯Ό 좜λ ₯ ν•œλ’€ msg = msg[len(w):] λ₯Ό 톡해 μž…λ ₯μ—μ„œ w λ₯Ό μ œκ±°ν•œλ‹€.

  4. μ΄λ•Œ msg에 μ²˜λ¦¬ν•΄μ•Ό ν•  λ¬Έμžκ°€ μ—¬μ „νžˆ λ‚¨μ•„μžˆλ‹€λ©΄ w+c λ₯Ό _dict 에 μ €μž₯ν•œλ‹€.

  5. 단계 2둜 λŒμ•„κ°„λ‹€.


from string import ascii_uppercase


def solution(msg):
	answer = list()
	_dict = dict()
	for val in ascii_uppercase:
		_dict[val] = len(_dict) + 1

	while msg:
		w = ''
		for idx in range(len(msg)):
			if msg[:idx + 1] in _dict:
				w = msg[:idx + 1]
			else:
				break

		answer.append(_dict[w])
		msg = msg[len(w):]
		if msg:
			wc = w + msg[0]
			_dict[wc] = len(_dict) + 1

	return answer

Categories:

Updated:

Leave a comment