프로그래머스 - 깊이/너비 우선 탐색(DFS/BFS)

# 타겟 넘버 (Level 2) 

  • 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

queue 생성 과정
pop한 temp가 마지막 원소이고 값이 target과 같다면 answer +=1
queue값이 비어야 끝

※ 참고 포스팅 : 프로그래머스 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

+ Recent posts