파이썬 27

[구현] 이코테, 프로그래머스 문자열 압축

문제 바로가기 중복되는 문자열을 압축해서 압축 결과가 가장 작은 길이를 출력하라. 조건 1] 앞에서부터 일정 단위로 자른다. 조건 2] 입력되는 문자열의 길이는 1이상 1,000이하이다. 힌트 길이가 1,000이기 때문에 완전 탐색을 수행할 수 있다. 문자열의 길이를 기준으로 가장 큰 반복문의 틀을 만든다. 문자열의 길이는 range(s,e,step)을 이용해, 문자열의 특정 단위를 탐색할 수 있다. import sys sys.stdin = open('./구현/input.txt','rt') s = str(input()) short = len(s) for step in range(1,len(s)//2+1): # i는 자를 문자열의 길이 # 0 단위, 1단위, 2단위, initial = s[:step] re..

⚡️algorithm 2022.06.14

[완전탐색, 브루트포스] 백준 1065. 한수

문제 n이 가진 한수 개수를 출력하라, 한수는 어떤 양의 정수 X의 각 자리가 등차수열을 이루는 수이다. 브루트포스 무차별 대입으로 해를 구하는 방식이다. 내 코드 x = int(input()) cnt = 0 for n in range(1,int(x)+1): if n//10 2: d = lst[0] - lst[1] flag = True for idx in range(len(lst)-1): if d != lst[idx] - lst[idx+1]: flag = False break if flag: cnt += 1 print(cnt)배울 코드 if x < 100: print(x) else: print(len(list(filter(lambda x: int(str(s)[2]) == 2*int(str(x)[1])- ..

⚡️algorithm 2022.06.06

[스택] 프로그래머스 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 = {&#39;zero&#39;:&#39;0&#39;,&#39;one&#39;:&#39;1&#39;,&#39;two&#39;:&#39;2&#39;,&#39;three&#39;:&#39;3&#39;,&#39;four&#39;:&#39;4&#39;,&#39;five&#39;:&#39;5&#39;,&#39;six&#39;:&#39;6&#39;,&#39;seven&#39;:&#39;7&#39;,&#39;eight&#39;:&#39;8&#39;,&#39;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