전체 글 170

[스택] 프로그래머스 lv1. 크레인 인형뽑기 게임

문제 인형이 쌓인 board에서 맨 위에 인형 하나씩 moves에 따라 꺼낸다. 꺼낸 인형들은 바구니에 담는데, 바구니에 담긴 인형들은 연달아 같은 인형이 담길 경우 제거된다. 제거된 인형의 개수는? 문제 바로가기 코드 def solution(board, moves): bucket = [] for j in moves: # 각 열에 있는 인형들 꺼내서 바구니에 담기 for i in range(len(board)): if board[i][j-1] != 0: bucket.append(board[i][j-1]) board[i][j-1] = 0 break cnt = 0 while True: long = len(bucket) # 더이상 인형제거가 발생하지 않는지 확인하기 위해 for i in range(1,len(..

⚡️algorithm 2022.05.30

[문자열] 프로그래머스 lv1. 숫자 문자열과 영단어

문제 https://programmers.co.kr/learn/courses/30/lessons/81301 내코드 문자인 애들만 따로 저장해뒀다가, word 딕셔너리의 키랑 같으면 값으로 넣어주기 import re def solution(s): word = {'zero':'0','one':'1','two':'2','three':'3','four':'4','five':'5','six':'6','seven':'7','eight':'8','nine&..

⚡️algorithm 2022.05.28

[문자열] 프로그래머스 lv1. 다트게임 (정규표현식, 10치환, isdecimal, 숫자찾기)

문제 문제 바로가기 다트 게임은 총 3번의 기회로 구성된다. 각 기회마다 얻을 수 있는 점수는 0점에서 10점까지이다. 점수와 함께 Single(S), Double(D), Triple(T) 영역이 존재하고 각 영역 당첨 시 점수에서 1제곱, 2제곱, 3제곱 (점수1 , 점수2 , 점수3 )으로 계산된다. 옵션으로 스타상(*) , 아차상(#)이 존재하며 스타상(*) 당첨 시 해당 점수와 바로 전에 얻은 점수를 각 2배로 만든다. 아차상(#) 당첨 시 해당 점수는 마이너스된다. 스타상(*)은 첫 번째 기회에서도 나올 수 있다. 이 경우 첫 번째 스타상(*)의 점수만 2배가 된다. (예제 4번 참고) 스타상(*)의 효과는 다른 스타상(*)의 효과와 중첩될 수 있다. 이 경우 중첩된 스타상(*) 점수는 4배가 ..

⚡️algorithm 2022.05.26

[그리디] 이코테. 큰 수의 법칙

이코테 : 이것이 취업을 위한 코딩테스트다 책의 예제문제 풀이 문제 배열의 수들을 m번 합해서 가장 큰 수를 만들어야 한다. 다만, 같은 수가 연속으로 k번을 초과해서 더해질 수 없다. 예를 들어 [2,4,5,4,6] 배열에, m = 8, k = 3 이라면 6+6+6+5+6+6+6+5 = 46 이 답이 된다. 인덱스가 다르면 수가 같아도 별도의 횟수로 센다. 문제 조건 1 res 필요 즉, first 숫자는 m을 (k+1)만큼 나눈 몫 x 한 사이클당 최대등장횟수 k 만큼 등장한다. 그리고 딱 떨어지지 않는 숫자 동안은 무조건 first 숫자로 더해줘야하기 때문에 m을 (k+1)로 나눈 나머지에 횟수만큼 first 로 합해준다. 따라서, (first 곱하기 cycle 곱하기 k) + (first 곱하기 ..

⚡️algorithm 2022.05.25

[그리디] 이코테 3-1. 거스름돈 (백준의 동전문제)

이코테 : 이것이 취업을 위한 코딩테스트다 책의 예제문제 풀이 문제 10의 배수로 주어지는 거스름돈을 돌려주려고 할 때, 최소 몇 개의 동전으로 거슬러 줄 수 있는가? 백준의 유사 문제인 11047 동전 포스팅 해설 가장 큰 동전으로 거슬러 줄 수 있는 금액부터 제거해줘야 최소 개수가 보장된다. 딕셔너리를 활용해봤다. 엊그제 해본 dic.items()의 sum도 써봤다. 코드 coins = [500, 100, 50, 10] coins.sort(reverse=True) n = int(input()) # 거스름돈 # 줄 동전의 최소 개수 cnt = 0 dic = {} for c in coins: dic[c] = n//c n -= dic[c]*c # print(n) print(sum(v for i,v in d..

⚡️algorithm 2022.05.25

[완전탐색] 프로그래머스 lv2. 소수찾기 (feat. 순열 조합, extend, permutations)

문제 종이 조각의 숫자들을 문자열 numbers로 받는다고 할 때, 각 문자열로 만들 수 있는 숫자 중 소수가 몇개인지 반환하라. 내 코드 플로우 문자열로 만들 수 있는 모든 길이의 조합을 리스트로 만든다. '01' 이나 '1'은 같은 숫자를 의미하기 때문에, 중복되는 값들은 조합 리스트에 넣지 않도록한다. 조합 숫자 리스트 전체를 돌며, 나누어 떨어지는 약수를 가지고 있는지 확인한다. 가지고 있지 않다면, cnt 값을 +1 해준다. 전체 코드 from itertools import permutations def solution(numbers): cnt = 0 tot = [] for i in range(1, len(numbers)+1): arr = list(int(i) for i in list(map('..

⚡️algorithm 2022.05.25

[정렬/파이썬] 프로그래머스 lv2. 가장 큰 수 (feat. sort 메서드)

문제 숫자로 이루어진 배열을 조합해 가장 큰 수를 만들어라 주의 from itertools import combinations, permutations 순열이나 조합을 그대로 사용하면, 시간초과가 뜬다. 결정적인 차이 내코드 numbers.sort(key=lambda x: str(x), reverse=True) >>> [9, 5, 34, 30, 3] sorting 키를 사전순으로 함. 참고코드 nums_s.sort(key=lambda n : n*3, reverse=True) 참고 블로그 >>> [9, 5, 34, 3, 30] sorting 키를 x3한 숫자의 사전순으로 함. 3이 30보다 먼저 나와야 330 > 303 으로, 더 큰 수를 만들기 위한 정렬이다. *3 (곱하기 3) 이 왜 필요하냐면, 10..

⚡️algorithm 2022.05.24

[정렬] 프로그래머스 lv2. h-index

문제 어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다. 어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요. 시간 초과를 주의해야 한다. 내 코드 import heapq as hq def solution(article): answer = 0 hq._heapify_max(article) # 내림차순 정렬 h = 0 for h in range(article[0]): # 가장 큰 값 기준으로 반복문 돌기 cnt = 0 for i in article: if i >= h: cn..

⚡️algorithm 2022.05.24

[힙] 프로그래머스. 더 맵게

문제 스코빌 지수를 K이상으로 만들고 싶어서, 스코빌 낮은 음식을 더 맵게 만들기 위해 가장 맵지 않은 음식이랑 그다음으로 안 매운 음식*2 를 섞어서 새로운 음식을 만들거야. 모든 음식의 스코빌지수가 K이상이 될 때까지 반복한다면, 몇 번 섞어야 하니? [https://programmers.co.kr/learn/courses/30/lessons/42626] 코딩테스트 연습 - 더 맵게 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같 programmers.co.kr heappop(배열) : 제일 작은 원소 꺼내기 heappush(원소, 배열) : 원소 넣기..

⚡️algorithm 2022.05.23

[해쉬] 프로그래머스 lv2. 전화번호 목록

문제 [프로그래머스 전화번호 목록] 주어진 전화번호 목록에서, 어떤 번호가 다른 번호의 시작번호가 되는 지를 판단해라. 시작번호를 가지는 전화번호 목록이라면 false, 반대라면 true 를 반환해라. 교훈 해쉬 테이블의 효율성 해쉬는 자료를 검색하는 데 정말 빠르다고 한다. 배열과 비슷한 역할을 하도록 해도, 키 값에 접근하는 것이라면 해시가 더 빠름을 알 수 있었다. (ex. i in list vs i in dictionary) 또한, 이것처럼 중복 검색을 위해 dictionary 자료형을 임의로 생성하는 코드 형태를 엿볼 수 있었다. prefix 검색에 대해, ((마지막 최종코드 참고)) if prefix in dic 접두사를 찾는다고 하면 접두사인 번호를 먼저 넣고 검색해야겠다고 접근하게 되는데,..

⚡️algorithm 2022.05.20