algorithm/프로그래머스 문제 16

[프로그래머스 LV2] 튜플

[LV2] 튜플 문제링크 셀수있는 수량의 순서있는 열거 또는 어떤 순서를 따르는 요소들의 모음을 튜플(tuple)이라고 합니다. n개의 요소를 가진 튜플을 n-튜플(n-tuple)이라고 하며, www.programmers.co.kr 문제해설 이번 문제는 설명이 조금은 부족하지만 간단하게 생각해보면 문자열 s에있는 숫자들중 반복되는 횟수가 가장 많은 숫자부터 리스트에 넣으면 되는 문제이다. 여기서 입력받은 s는 {} , 등 문자가 있기때문에 replace를 사용하여 미리 삭제 해주었다. 그후 딕셔너리를 사용해서 각각의 숫자가 나온 횟수를 정리하고 이것을 정렬하여 리스트에 넣었다. def solution(s): answer = [] hash={} #숫자의 반복횟수를 나타내는 딕셔너리 s=s.replace('..

[LV2]위장

[LV2]위장 문제링크 스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다. 예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입 www.programmer.co.kr 문제 해설 이 문제는 같은 종류의 물건들을 제외한 조합 경우의수를 생각해보면 되는데 우선 같은 종류의 옷을 딕셔너리에 정리한 후 경우의수 구하는 공식인 *(n+1)을 해주면 모든 경우의 수가 나오게 된다. 여기서 마지막 -1은 아무 옷도 안입고 있을때를 의미한다. def solution(clothes): answer = 1 match={} #옷의 종류와 이름을 저장할 딕셔너리 for value,key in clothes: #딕셔너리에 옷의 종류와 이름 정리 if key in match..

[LV2]전화번호 목록

[LV2]전화번호 목록 문제링크 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. www.programmer.co.kr 문제해설 이번 문제는 리스트를 통해서 모든 탐색을 하면 정확성을 만점을 받을 수 있지만 효율성에서 시간초과가 나오게 된다. 그렇기 때문에 해시(hash) 알고리즘을 사용해야하는데 파이썬은 딕셔너리가 이 역할을 한다. def solution(phone_book): answer = True hash={}#딕셔너리 선언 for i in phone_book: #모든 전화번호를 (전화번호:0) 으로 설정 hash[i]=0 for i in phone_book: tmp='..

[LV2]조이스틱

[LV2]조이스틱 문제링크 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA조이스틱을 각 방향으로 움직이면 아래와 www.programmer.co.kr 문제 해설 우선 전체 알파벳의 중간지점을 기준으로 현재 문자부터 'A' 까지 걸리는 거리의 최소값을 answer에 더함으로써 상하의 이동값을 계산한다. 좌우에서 최소한의 이동을 가지려면 'A'가 연속적으로 있는곳으로는 갈 필요가 없고 만약 연속된 'A'가 여러곳에 있다면 연속된 길이가 긴 곳보다 짧은곳을 가는것이 이득이다. 연속된 A의 왼쪽으로 가는 방법과 오른쪽으로 가는 방법과 기본 움직임 중에서 최소값을 구한다. def solution(name): answe..

[LV2]타겟 넘버

[LV2]타겟 넘버 문제 링크 n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. www.programmers.co.kr 문제해설 이 문제는 기본적으로 숫자의 개수가 2~20개이기 때문에 모든 경우를 탐색해도 시간초과가 일어나지 않는다. 그렇기 때문에 앞에서부터 연산한 숫자들을 모두 리스트에 넣은 후 COUNT함수를 사용하여 target과 동일한 숫자가 몇개인지 찾으면 되는 문제이다. def solution(numbers, target): start=[0] #초기값 for i in numbers: #앞에서부터 연산 num=[] for j in start: #앞서 연산되어있던 숫자들에 각각 +,-연산을 실행하여 다시 리스트에 저장 num..

[LV2]짝지어 제거하기

[LV2]짝지어 제거하기 링크 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. www.programmers.co.kr 문제해설 이 문제는 반복문을 사용하여 각각의 문자를 스택에 집어넣어 비교하여 서로 같은 문자이면 제거하여 최종적으로 스택에 문자가 남아있으면 0을반환 그렇지 않으면 1을 반환하면 되는 문제이다. 이 문제에서 길이가 홀수인 문자는 항상 스택에 문자가 남을 수 밖에 없으므로 0을 반환하게 처리하였다. def solution(s): stack=[] #스택 for i in range(len(s)): #문자열의 길이만큼 반복 if len(s)%2==..