문제 : 

 

코딩테스트 연습 - 주식가격

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00

programmers.co.kr

 

스택/큐에 있던 카테고리지만 그냥 이중 for문으로 풀었다.

 

입출력 예시의 3초, 4초 시점에서 가격이 1초 뒤에 떨어져도, 1초간 가격이 떨어지지 않아도

둘다 1초간 가격이 떨어지지 않은 경우라는 것이 직관적으론 이해가 갔는데 

처음 구현할때는 계속 원하는 출력이 나오지 않았다 ㅡㅡ

 

짜증나서 이틀 뒤에 처음부터 다시 풀었더니 풀렸다.

 

Solution

def solution(prices):
    answer = []
    size=len(prices)
    for i in range(size):
        cnt=1
        for j in range(i+1,size-1):        
            if prices[i]>prices[j]: break    
            cnt+=1
            
        answer.append(cnt)
        if len(answer)==size-1:
            answer.append(0)
            return answer

 

헤헤

반응형

문제 : 

 

코딩테스트 연습 - 타겟 넘버

n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+

programmers.co.kr

예전에 풀어봤던 dfs/bfs 문제를 다시 풀어보았다

 

 

Solution

예전 풀이 : BFS (deque() 사용)

from collections import deque
def solution(numbers, target):
    answer = 0
    size=len(numbers)
    dq=deque()
    dq.append((0,0))
       
    while dq:
        cur,cnum=dq.popleft()
        
        if cur==size and cnum==target:
            answer+=1
        
        else:
            if cur<size:
                nnum=numbers[cur]
                dq.append((cur+1,cnum+nnum))
                dq.append((cur+1,cnum-nnum))    
    return answer

 

이번 풀이 : DFS

res=0
def dfs(numbers,num,target,idx):
    global res
    if idx==len(numbers):
        if num==target:
            res+=1
            return
        else : return
    
    dfs(numbers,num+numbers[idx],target,idx+1)
    dfs(numbers,num-numbers[idx],target,idx+1)
    
def solution(numbers, target):
    global res
    dfs(numbers, 0, target, 0)
    return res

 

 

반응형

프로그래머스>해시>'완주하지 못한 선수' 를 풀었다.

 

코딩테스트 연습 - 완주하지 못한 선수

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수

programmers.co.kr

 

얼마전 비슷한 문제를 풀어서 어렵지 않게 풀 수 있었다. (해쉬는 파이썬 딕셔너리가 짱짱인듯..)

 

비슷한 문제 : [해커랭크] Hash Table : Ransom Note 가 있다. (같은 접근으로 풀이 가능)

 

Hash Tables : Ransom Note (Python)

Hash Tables: Ransom Note | HackerRank Given two sets of dictionaries, tell if one of them is a subset of the other. www.hackerrank.com 오랜만에 해커랭크에서 문제를 풀었다. 고새 파이썬 딕셔너리 사용..

rokroks.tistory.com

 

 


 

 

Solution

def solution(p,c):
    dic={}
    res=''
    for x in p:
        if x not in dic:
            dic[x]=1
        else:
            dic[x]+=1

    for x in c:
        if x in dic:
            dic[x]-=1
    
    for x in dic:
        if dic[x]>0: res=x
            
    return res  

1) 딕셔너리에 '참가자 이름 : 동명이인 수'로 저장

2) 완주자 이름(딕셔너리 key) 존재 시 value 감소  

3) 딕셔너리 0 초과 값인 key 출력 (완주하지 않은 경우)

 

 

깰끔

 

 

 


 

 

 

다른 사람의 파이썬 풀이 중에 흥미로운 라이브러리가 있어서 가져와봤다.

(참고 : wooaoe.tistory.com/71)

 

import collections as coll
def solution(p,c):
    p.sort()
    c.sort()
    result=coll.Counter(p)-coll.Counter(c)
    return list(result)[0]

collections 라이브러리의 Counter,, 차집합 개념으로 구현된 코드이다.

역시 파이썬은 최강이다..

 

 

반응형

+ Recent posts