프로그래머스 - 깊이/너비 우선 탐색(DFS/BFS)
- Point. 타겟 넘버가 그래프 문제인 이유 -> 다음 인덱스에 해당하는 numbers 원소를 더하거나 빼 값을 방문한다.
- 방문한(pop)한 원소 temp가 방문할 수 있는 값은 temp 다음 인덱스에 위치한 numbers원소를 +또는 - 한 값이다.
from collections import deque
def solution(numbers, target):
answer = 0
queue = deque()
n = len(numbers)
queue.append([numbers[0],0])
queue.append([-1*numbers[0],0])
#print(queue)
while queue: # queue가 빌때가지 반복
temp, idx = queue.popleft()
idx += 1
if idx < n:
queue.append([temp+numbers[idx], idx])
queue.append([temp-numbers[idx], idx])
#print(queue)
else:
#print(temp)
#print(queue)
if temp == target:
answer += 1
#print("count up")
return answer
※ 참고 포스팅 : 프로그래머스 level2 타겟넘버(BFS/DFS)
# 문자열 내 p와 y의 개수
- 문자열 소문자로 바꾸는 함수 : lower()
- 문자열의 특정 문자 개수 세는 함수 : count()
def solution(s):
if s.lower().count('p') == s.lower().count('y'):
return True
else :
return False
# 문자열 내림차순으로 배치하기
- 문자열 리스트로 저장 후 정렬하기 sort 소문자 -> 대문자 순으로 정렬해줌
def solution(s):
answer = ''
s = list(s)
s.sort(reverse = True)
for i in s:
answer += i
return answer
# 문자열 다루기 기본
- 숫자인지 판별하는 함수 : isdigit()
def solution(s):
if s.isdigit() and (len(s) == 4 or len(s) == 6):
return True
else:
return False
# 2016년
- datetime 모듈을 사용하여 날짜의 요일을 받아온다
- 날짜 생성하기 : datetime(년, 월, 일, 시, 분, 초, 밀리 초)
- 요일 반환 (0:월, 1:화, 2:수, 3:목, 4:금, 5:토, 6:일) : weekday()
import datetime as dt
def solution(a, b):
answer = ''
week_list = ['MON','TUE','WED','THU','FRI','SAT','SUN']
x = dt.datetime(2016, a, b,1,1,1)
answer = week_list[x.weekday()]
return answer
+ 다른 사람 풀이
def getDayName(a,b):
months = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
days = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU']
return days[(sum(months[:a-1])+b-1)%7]
반응형
'알고리즘 > programmers' 카테고리의 다른 글
[ 프로그래머스 / 파이썬 ] 여행경로 - DFS/BFS (0) | 2021.04.12 |
---|---|
20210408_코테공부 (0) | 2021.04.08 |
[ 프로그래머스 / 파이썬 ] 주식가격 (0) | 2021.03.31 |
20210319_코테공부 (0) | 2021.03.19 |
20210316_코테공부 (0) | 2021.03.16 |