https://school.programmers.co.kr/learn/courses/30/lessons/131704

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


내 풀이

def solution(order):
    temp = []
    i = 1
    now = 0
    
    while i != len(order)+1:
        temp.append(i)
        while temp[-1] == order[now]:
            now += 1
            temp.pop()
            
            if len(temp) == 0:
                break
        i += 1


    return now

처음에 문제가 잘 이해가 안됐다.

[1,2,3,4,5]의 순서로 있는택배를 order에서 요청한 대로 쌓아야하는데, 그게 불가능하다면 최대한으로 가능한 숫자를 리턴한다

그니까 1 2 3 4 5 -> 4 3 1 2 5 의 순서대로 쌓으라는 말이다

4번을 최초로 쌓으라했으니 1 2 3 번 까지 스택구조의 임시컨테이너에 넣어놓고 4번을 택배트럭에 싣는다.

다음 3번을 쌓아야하니 임시컨테이너에서 3번을 꺼낸다(스택구조) 참고로 pop은 리스트에서 젤 뒤에 요소를 삭제하고 그 값을 리턴한다. 

만약에 임시컨테이너에 더 쌓여진게 없으면 모두 택배에 넣어진거니까 break해서 빠져나온다.

 

 


다른사람의 풀이

https://velog.io/@namkun/프로그래머스-lv2-택배상자

 

프로그래머스 lv2 택배상자

택배상자처음에는 for문으로 order를 전부 돌면서 그 안에서 조건을 걸고 찾았었다. 결과는 테스트케이스 10개중에 6개까지 맞고 4개는 시간 초과왜인가 고민좀 해봤는데, 아무래도 for문 돌면서 (

velog.io



 

 

'취준 > 프로그래머스' 카테고리의 다른 글

롤케이크 자르기 - 파이썬  (0) 2022.11.02
2개 이하로 다른 비트 - 파이썬  (0) 2022.10.17
파일명 정렬 - 프로그래머스  (0) 2022.10.11
n^2 배열 자르기 - 파이썬  (0) 2022.10.11
방문 길이 - 파이썬  (1) 2022.10.05

https://school.programmers.co.kr/learn/courses/30/lessons/132265?language=python3 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


내 풀이

from collections import defaultdict

def solution(topping):
    Top = defaultdict(int)
    for i in topping:
        Top[i] +=1
        
    Top_set=set()
    count=0
    for i in topping:
        Top[i] -=1
        Top_set.add(i)
        if Top[i] ==0:
            Top.pop(i)
        if len(Top) == len(Top_set):
            count +=1
    return count

 


defaultdict를 이용해서 있는거 추가해주고 어떤 key의 VALUE값이 0 이면 없애준다.

 


다른사람의 풀이

from collections import Counter

def solution(topping):
    Top = Counter(topping)
    count=0
    Top_set=set()
    for i in topping:
        Top[i] -=1
        Top_set.add(i)
        if Top[i] ==0:
            Top.pop(i)
        if len(Top) == len(Top_set):
            count +=1
    return count

 


이게 더 나은 코드같다. 다 똑같은데 counter를 쓰면 편하게 셀 수 있다!


 

'취준 > 프로그래머스' 카테고리의 다른 글

택배상자 - 파이썬  (0) 2022.11.03
2개 이하로 다른 비트 - 파이썬  (0) 2022.10.17
파일명 정렬 - 프로그래머스  (0) 2022.10.11
n^2 배열 자르기 - 파이썬  (0) 2022.10.11
방문 길이 - 파이썬  (1) 2022.10.05

https://school.programmers.co.kr/learn/courses/30/lessons/77885


내 풀이

 

# xor 연산 - 같으면 0 다르면 1 연산의 결과중에 1의 개수가 2개 이하인거만 세면되지않을까?


# def solution(numbers):
#     maxs=100000
#     temp = []
#     for i in numbers:  
#         j = i + 1
#         while True:
#             if bin(i^j).count('1') <=2:
#                 temp.append(j)
#                 break
#             j=j+1
                    
#     return temp

최초의 풀이는 이랬다. xor연산 했고 시간초과

 

def solution(numbers):
    answer=[]
    for i in numbers:
            if i % 2 ==0:
                answer.append(i+1)
            else:
                j = '0' + bin(i)[2:]
                idx = j.rfind('0')
                j = list(j)
                j[idx]='1'
                j[idx+1]='0'

                answer.append(int(''.join(j),2))
    return answer

그래서 그냥 예제케이스로 보여준거 그대로 구현해봤는데 성공했다

다른 블로그 보니까 직접 손으로 구하셨던데, 게으른 나는 그냥 테스트케이스에서 일반화 했는데 얻어걸렸다.



다른사람의 풀이

 



 

'취준 > 프로그래머스' 카테고리의 다른 글

택배상자 - 파이썬  (0) 2022.11.03
롤케이크 자르기 - 파이썬  (0) 2022.11.02
파일명 정렬 - 프로그래머스  (0) 2022.10.11
n^2 배열 자르기 - 파이썬  (0) 2022.10.11
방문 길이 - 파이썬  (1) 2022.10.05

https://school.programmers.co.kr/learn/courses/30/lessons/87390

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


내 풀이

def solution(n, left, right):
    answer = []
    
    for i in range(left,right+1):
        a = i//n
        b = i % n
        
        answer.append(max(a,b)+1)
        
    return answer

 


다른사람의 풀이

 

solution = lambda n, left, right: list((max(i // n, i % n) + 1 for i in range(left, right + 1)))


 

 

 

 

 

 

 

 

'취준 > 프로그래머스' 카테고리의 다른 글

2개 이하로 다른 비트 - 파이썬  (0) 2022.10.17
파일명 정렬 - 프로그래머스  (0) 2022.10.11
방문 길이 - 파이썬  (1) 2022.10.05
야근 지수 - 파이썬  (0) 2022.09.13
행렬의 곱셈 - 파이썬  (0) 2022.09.12

https://school.programmers.co.kr/learn/courses/30/lessons/49994

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


내 풀이

def solution(dirs):
    answer=0
    visited = []
    move = {'U': (0, 1), 'D': (0, -1), 'R': (1, 0), 'L': (-1, 0)}
    x,y=0,0
    
    for dir in dirs:
        nx = x + move[dir][0]
        ny = y + move[dir][1]
        print(x,y,nx,ny)
        if -5<=nx<=5 and -5<=ny<=5:
            if not ([[x,y],[nx,ny]] in visited or [[nx,ny],[x,y]] in visited):
                visited.append([[x,y],[nx,ny]])
                
                answer+=1
            x,y=nx,ny
            print(x,y,nx,ny)    
    
    
    
    return answer

사실 처음에는 10 x 10 그래프를 만들어놓고 bfs 문제 풀듯이 다 체크한 뒤에 1의 개수만 세려고했는데 너무 낭비인거같아서 방법을 바꿨다.

방법은 이렇다, u,d,r,l 마다 움직일 방향을 미리 정해놓고 정해놓은 방향으로 갔을때 범위를 넘지않고, 한번도 방문한적 없다면 visit에 넣어준다. 넣어줄때마다 answer에 더해준다.

하나 생각해야할것은, 가령 (1,0) 에서 (0,0)로 좌측으로 한칸 가는거나 (0,0) 에서 (1,0)으로 우측으로 한칸가는거나 같은거다.

그래서 그전 좌표와 갱신할 좌표를 모두 visit에 넣어준다 (x,y,nx,ny) 그리고 x,y 에 갱신 한 좌표를 마지막에 할당해줌으로서 이어나간다.

 

 


다른사람의 풀이

 



 

'취준 > 프로그래머스' 카테고리의 다른 글

파일명 정렬 - 프로그래머스  (0) 2022.10.11
n^2 배열 자르기 - 파이썬  (0) 2022.10.11
야근 지수 - 파이썬  (0) 2022.09.13
행렬의 곱셈 - 파이썬  (0) 2022.09.12
영어 끝말잇기 - 파이썬  (0) 2022.09.12

https://school.programmers.co.kr/learn/courses/30/lessons/12927

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


내 풀이

 

최초 틀렸던 풀이

def solution(n, works):
    answer = 0
    if n >= sum(works):
        return 0

    sums=0    
    while n:
        works.sort(reverse=True)
        works[0] -=1
        n-=1
    works.sort()

    return sum([i**2 for i in works])

 

사실 틀릴줄 알고 있었다. 왜냐면 레벨3 문제인데 너무 쉬웠기 때문.

틀리고 나니까 heapq을 써야겠구나 싶어서 바로 적용해서 풀었다.

 

import heapq

def solution(n, works):
    answer = 0
    if n >= sum(works):
        return 0

    works = [-i for i in works]
    #print(works)
    heapq.heapify(works)

    for _ in range(n):
        i = heapq.heappop(works)
        i += 1
        heapq.heappush(works, i)

    return sum([i ** 2 for i in works])

 

 

 


리스트 컴프리헨션이 점점 익숙해지고 있어서 그 점은 마음에 든다만 잘 짠 코드인지는 좀 의문이 든다.


다른사람의 풀이

 



 

'취준 > 프로그래머스' 카테고리의 다른 글

n^2 배열 자르기 - 파이썬  (0) 2022.10.11
방문 길이 - 파이썬  (1) 2022.10.05
행렬의 곱셈 - 파이썬  (0) 2022.09.12
영어 끝말잇기 - 파이썬  (0) 2022.09.12
k진수에서 소수 개수 구하기 - 파이썬  (0) 2022.09.11

+ Recent posts