Skip to content

Commit 04216c4

Browse files
authored
Merge pull request #228 from AlgorithmStudy-Allumbus/hongjoo
Hongjoo/ 6월 4주차 / 4문제
2 parents ae0b030 + 009301f commit 04216c4

File tree

4 files changed

+117
-0
lines changed

4 files changed

+117
-0
lines changed

Hongjoo/lv2/3차_압축.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
"""
2+
## 프로그래머스#17684. [3차]_압축: 구현 / lv2
3+
> 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/17684
4+
"""
5+
def solution(msg):
6+
answer = []
7+
# 1. 사전 초기기
8+
dict = {}
9+
idx = 1 # 초기 사전 idx
10+
for o in range(65, 65+ 26) :
11+
dict[chr(o)] = idx
12+
idx += 1
13+
last_idx = idx-1
14+
#2. 입출력 단어 압축하기
15+
prev_idx = -1
16+
w_s = 0 ; w_l = 1
17+
while w_s+w_l <= len(msg) :
18+
word = msg[w_s : w_s + w_l]
19+
idx = dict.get(word , -1 )
20+
if idx > -1 :
21+
prev_idx = idx
22+
w_l += 1
23+
continue
24+
#사전에 없음
25+
else :
26+
last_idx += 1
27+
dict[word] = last_idx # 사전 등록하기
28+
w_s = w_s + w_l - 1 #탐색 point 업데이트
29+
w_l = 1 # 단어 길이 초기화
30+
answer+= [prev_idx]# 이전 존재한 단어의 idx 는 출력 리스트에 추가
31+
answer+= [prev_idx] # 마지막 w 의 인덱스 출력
32+
33+
34+
return answer

Hongjoo/lv2/기능개발.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"""
2+
## 프로그래머스#42586. 기능개발 : 구현, 큐/lv2
3+
> 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42586
4+
5+
"""
6+
import math
7+
from collections import deque
8+
def solution(progresses, speeds):
9+
answer = []
10+
# 1. progress별로 추가 Day 구하기
11+
days= deque([0 for _ in range(len(progresses))])
12+
for i in range(len(progresses)) :
13+
days[i] = math.ceil((100 - progresses[i]) / speeds[i])
14+
# print(days)
15+
#2. 같은 배포일을 가진 서비스 개수들 구하기
16+
while days :
17+
tmp = 0
18+
develop_day = days[0]
19+
# deque로 develop_days보다 더 빠르게 종료되는 서비스들은 pop
20+
while days and develop_day >= days[0] :
21+
tmp += 1
22+
days.popleft()
23+
# 해당 develop_day보다 큰 경우, 그 전까지 서비스들이 같은 배포일 가짐
24+
answer.append(tmp)
25+
26+
27+
return answer

Hongjoo/lv2/스킬트리.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
2+
# skillset이 선행조건 충족 여부 확인 함수
3+
def check_skill(words , skill) :
4+
set_p = 0 ;
5+
for c in words :
6+
# 해당 스킬(c) 가 선행스킬 속 존재여부 파악 및 순번 확인
7+
idx = skill.find(c)
8+
if idx < 0 : # ok
9+
continue
10+
elif idx == set_p : # ok
11+
set_p +=1
12+
continue
13+
else :
14+
# 선행 스킬 순서 보다 더 이르게 w 스킬이 등장한 경우
15+
return False
16+
return True
17+
18+
def solution(skill, skill_trees):
19+
answer = 0
20+
# 반복문올 skill_tree 속 선행스킬 조건에 충족하는 스킬 확인 및 개수 계산
21+
for skillset in skill_trees :
22+
if check_skill(skillset , skill) :
23+
answer += 1
24+
25+
return answer

Hongjoo/백준/숨바꼭질3.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,34 @@
3939
visited[nx] = visited[cx] +1
4040
q.append(nx)
4141
print(visited[K])
42+
import sys
43+
from collections import deque
44+
input = sys.stdin.readline
45+
MAX = 100000
46+
N , K = map(int, input().split())
47+
visited = [MAX] * (MAX+1) # 방문 여부
48+
# 2. BFS로 N-> K 의 모든 경로 찾기
49+
t=0
50+
q = deque([N , t])
51+
visited[N]= 0
52+
53+
54+
while q :
55+
cx= q.popleft()
56+
ct =visited[cx]
57+
for nx in (cx-1 , cx+1 , 2*cx) :
58+
if 0 <= nx < MAX :
59+
# 시간 업데이트
60+
if nx == 2*cx :
61+
nt = ct
62+
else :
63+
nt = ct+1
64+
65+
if visited[nx] >= MAX : # 처음 도달
66+
q.append(nx)
67+
visited[nx] = nt
68+
else : # 중복& 최단 거리일때
69+
if nt < visited[nx] :
70+
visited[nx] = nt
71+
q.append(nx)
72+
print(visited[K])

0 commit comments

Comments
 (0)