일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- BFS
- level3
- 다시풀기
- 대학원
- 대학원일기
- 파이썬
- 컨트리뷰톤
- level1
- 컴퓨터비전
- git
- 안드로이드스튜디오
- D3
- MSBuild
- Python
- 내휴학생활중의아주큰일
- build
- 자바
- SWEA
- Matrix Factorization
- Github
- 프로그래머스
- level4
- 어렵다
- java
- LEVEL2
- WebOS
- androidstudio
- SQL
- 휴학
- py
Archives
- Today
- Total
bit가 눈 앞에서 왔다갔다
Py ) 프로그래머스 60057 + 1/16다시풀기 본문
https://programmers.co.kr/learn/courses/30/lessons/60057
어디서 본 거 같다고 생각했는데 나동빈씨 책에 있는 문제였다.
예전에 봤을 때 안풀고 넘겼었나봄. 푼 흔적이 없다.
나동빈씨는 똑똑하다.
def solution(s):
answer = len(s)
candi = ""
for i in range(1, len(s) // 2 + 1): # 토큰의 길이 설정
front = s[0:i]
cnt = 1
for j in range(i, len(s), i):
if front == s[j:j+i]: # 그 다음과 같을 경우
cnt += 1
else: # 같지 않음, 비교 끝
if cnt >= 2: # 중복의 경우가 2 이상
candi += str(cnt) + front # 숫자와 함께 넣어줌
else:
candi += front
front = s[j:j+i] # 그 다음 토큰
cnt = 1
if cnt >= 2:
candi += str(cnt) + front
else:
candi += front
answer = min(len(candi), answer)
return answer
틀렸지만 + 파이썬을 잘 몰라서 제대로 못풀었지만 열심히 했으니까 내 꺼도 올리기,,,
'''
2 이상 중복의 경우 숫자로 표현, 1은 숫자 없음
2개 단위로 자르기
문자열 압축한 것 중 가장 짧은 것의 길이 return
'''
"""
for i in range(len(문자열))
정해진 길이만큼 잘라야한다.
문자열 mod i == 0인 경우만 가능
[0:i]로 잘라서 list에 넣기
다 list.append()해서 넣고,
list 맨 앞 원소 기준으로 바로 뒤 원소가 같으면 세어주면서 삭제
같은게 있었다면, tmp += 해당 원소 길이 + 1
같은게 없었다면 tmp += 해당원소 길이
이후 candi.append(tmp)
tmp = 0
각 문자 요소가 뒤에 있는지 없는지 판단?
"""
from collections import deque
def solution(s):
answer = 0
sliced=deque([])
candi = []
# 0~14
# 1로 한바퀴 다 돌고 그 다음 바퀴 돌도록
for i in range(len(s)):
copy = list(s)
if i == 0 or len(s) % i != 0:
continue
while copy:
check = copy[:i]
if i == 1: # 뒤에 같은 문자가 없으면 종료
if check not in s:
answer = len(s)
return answer
sliced.append(copy[:i]) # i만큼 자른 거 list에 넣기
copy.lstrip(copy[:i]) # 어떻게 하는거지..?
tmp = 0
front = sliced.popleft()
while sliced:
second = sliced.popleft()
n = len(front)
if front == second: # 앞뒤 원소가 같다면,
n += 1
tmp += n
front = second
candi.append(tmp)
answer = min(candi)
return answer
문자열에서 일정 코큰만큼 지워버리고 싶었는데
방법을 못찾았다. list로 했다면 어떻게 했을거 같긴한데, 이미 진이 빠져버린 상태였다. 힘들었음,, 그래서 그냥 답 보기로..
화이팅 나 자신... (뚀륵,,
+ 다시 풀기 - 성공)
def solution(s):
answer = len(s)
cnt = 1
comp =[]
for i in range(1, len(s)//2+1):
first = s[0:i]
for j in range(i, len(s)+1, i):
if first == s[j:j+i]:
cnt += 1
else:
if cnt > 1:
comp += str(cnt)+first
else: comp += first
cnt = 1
first = s[j:j+i]
comp += s[j:]
answer = min(answer, len(comp))
comp.clear()
return answer
반응형
'Algorithm > Prob' 카테고리의 다른 글
Py) 프로그래머스 42862 (0) | 2022.01.12 |
---|---|
Py) 프로그래머스 42627 (0) | 2022.01.12 |
Py) 프로그래머스 42584 (0) | 2022.01.07 |
Py) 프로그래머스 42587 (0) | 2022.01.07 |
Py) 프로그래머스 43165 (0) | 2022.01.05 |
Comments