문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/60057
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
해당 문제는 입력받은 문자열의 절반만큼의 수로 문자열을 잘라서 비교하는 문제입니다.
1. for문으로 1,2,... len(s) // 2 +1 까지 자를 수를 정한다.
2. stack을 사용하여 해당 자를 수가되면 비교를한다
3 현재 자른 결과를 answer와 비교하여 최소값을 찾는다
def solution(s):
answer = 1001
# 1개가 들어올 경우 1 return
if len(s) == 1:
return 1
# s의 길이의 절반까지 나눈 압축의 최소값을 구한다.
for i in range(1,len(s) // 2 + 1):
stack = []
cnt = 1
now_result = ""
cur_word = ""
# i로 현재에서 나눈 단어를 비교해본다
for word in range(len(s)):
# 현재 단어를 더해준다
cur_word += s[word]
# 만약 cur_word가 i와 같으면 아래단계진행
if len(cur_word) == i:
# 아직 아무 단어도 저장 안되어있다면
if len(stack) == 0:
stack.append(cur_word)
cur_word = ""
# 바로 전의 단어가 저장되어 있다면
else:
# 바로전의 단어와 같다면 cnt를 올려준다
if stack[0] == cur_word:
cnt += 1
cur_word = ""
# 바로 전의 단어와 다르면 전의단어를 now_result에 저장
# 그 후 현재의 단어를 stack에 저장
else:
prev_word = stack.pop()
if cnt == 1:
now_result += prev_word
else:
now_result += str(cnt) + prev_word
cnt = 1
stack.append(cur_word)
cur_word = ""
if cnt != 1:
now_result += str(cnt) + stack.pop()
else:
now_result += stack.pop()
now_result += cur_word
answer = min(len(now_result), answer)
return answer
해당 반복문의 마지막을 처리하는것이 관건이였습니다.
그래서 해당 마지막 처리하는 로직을 추가해주고 반복할때마다 answer와 비교하여 최소값을 찾았습니다.
'알고리즘' 카테고리의 다른 글
[leetcode] Climbing Stairs - Python (0) | 2024.02.19 |
---|---|
[Leetcode] Group Anagrams - 파이썬 (0) | 2024.02.14 |
[프로그래머스] 신규 아이디 추천- 파이썬 (0) | 2024.02.14 |
[프로그래머스] 두 큐 합 같게 만들기 - 파이썬 (1) | 2024.01.10 |
[알고리즘] 다익스트라 (0) | 2023.12.29 |