⚡️algorithm 96

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

문제 바로가기 중복되는 문자열을 압축해서 압축 결과가 가장 작은 길이를 출력하라. 조건 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

[문자열] 프로그래머스 lv2. 방금그곡

문제 내가 들은 음계가 그 노래 음계에 포함이 되니? 리뷰 if m in played: 가 중요했다. 코드 melody = [&#39;C&#39;, &#39;C#&#39;, &#39;D&#39;, &#39;D#&#39;, &#39;E&#39;, &#39;F&#39;, &#39;F#&#39;, &#39;G&#39;, &#39;G#&#39;, &#39;A&#39;, &#39;A#&#39;, &#39;B&#39;] m = &#39;ABCDEFG&#39; info = ["12:00,12:14,HELLO,CDEFGAB", "13:00,13:05,WORLD,ABCDEF"] answer = &#39;HELLO&#39; def removeSharp(music): if &#39;A#&#39; in music: music..

⚡️algorithm 2022.05.31

[조합, 자료구조] 프로그래머스 lv2. 후보키

문제 문제 바로가기 후보키를 구하는 문제이다. 후보키의 개념을 알고 있다면, 문제이해가 빠르긴 한데 구현이 더 중요하다. 리뷰 주요 변수는 맞았는데, for의 전개나 구조가 너무 복잡하게 느껴졌었다. 다른 사람들 코드를 보니 자료구조를 정말 적극적으로 사용한 게 보였다. 반복해서 연습하면 skill 향상이 되지 않을까 한다.. 냠냠.. 코드 from itertools import combinations rel = [["100","ryan","music","2"],["200","apeach","math","2"],["300","tube","computer","3"],["400","con","computer","4"],["500","muzi","music","3"],["600","apeach","music"..

⚡️algorithm 2022.05.31

[스택] 프로그래머스 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