알고리즘
-
코딩테스트 연습> 연습문제> 올바른 괄호ALGORITHM/Programmers 2020. 7. 12. 15:56
코딩테스트 연습 - 올바른 괄호 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 ()() 또는 (())() 는 올바른 괄호입니다. )()( 또는 (()( 는 올바르지 않은 괄호� programmers.co.kr 문제설명: 배열 s 에 '(' 또는 ')'가 들어있고, 여는 괄호와 닫는 괄호가 '()'로 만나면 제거해 준다. 이 때, s 배열에 원소가 남아 있다면 짝이 맞지 않으므로 False를 반환하고, 빈 배열로 남는다면 True를 반환한다. [1차 시도] def solution(s): bin = [] for i in s: if not bin and i==')': return False if i=='(': bin.append(i) ..
-
코딩테스트 연습> 힙(Heap)> 더 맵게ALGORITHM/Programmers 2020. 7. 3. 13:00
코딩테스트 연습 - 더 맵게 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같�� programmers.co.kr 문제설명: scoville 배열에 스코빌 지수가 주어지고, 이 중 가장 맵지 않은 지수와 두 번째로 맵지 않은 지수 즉 가장 낮은 숫자 2개를 뽑아 (최소값+ 두 번째 최소값*2)을 다시 scoville 배열에 넣어주기를 반복한다. 이를 모든 스코빌 지수가 주어진 변수 K보다 큰 값이 될 때까지 반복하면 된다. 단, 모든 변환을 마치고도 K보다 작은 값이 남아있다면 -1을 return 한다. [1차 시도] import heapq def solut..
-
코딩테스트 연습> 연습문제> 핸드폰 번호 가리기ALGORITHM/Programmers 2020. 7. 1. 23:06
코딩테스트 연습 - 핸드폰 번호 가리기 프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자 programmers.co.kr 문제설명: phone_number에 숫자가 주어지고 뒤 4자리만 숫자를 나타내고 앞자리는 모두 '*'로 표시해주면 된다. [1차 시도] def solution(phone_number): ans = list('*'*len(phone_number)) ans[-4:len(phone_number)] = phone_number[-4:len(phone_number)] return ''.join(map(str,ans)) 풀이: 우선 phone_numb..
-
코딩테스트 연습> 해시> 완주하지 못한 선수ALGORITHM/Programmers 2020. 6. 29. 23:38
코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수�� programmers.co.kr 문제설명: participant배열과 completion배열에 각각의 선수 이름들이 나열되어 있다. 해당 문제를 풀기 위해서는 2가지 케이스를 볼 수 있는데, 모두 participant에는 이름이 있지만, completion에는 이름이 없는 경우에 해당한다. 즉, 참가는 했지만 완주하지 못한 경우와, 2명의 동명이인 선수가 참가했지만, 1명만 완주를 한 경우이다. 따라서 participant와 completion 배열 내 선수 차이를 확인..
-
코딩테스트 연습> 연습문제> 2016년ALGORITHM/Programmers 2020. 6. 28. 21:11
코딩테스트 연습 - 2016년 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까�� programmers.co.kr 문제설명: 2016년은 1월 1일이 금요일고, solution함수에 a,b로 월과 일이 주어진다. 2016년 기준으로 a월 b일이 무슨요일인지 반환하면 된다. 단, 문제에서 2016년은 윤년으로 2월 29일까지 있다. [1차 시도] def solution(a, b): answer = ['THU','FRI','SAT','SUN','MON','TUE','WED'] zero = [4,6,9,11] one = [1,3,5,7,..
-
프로그래머스> 해시> 위장ALGORITHM/Programmers 2020. 6. 26. 13:55
코딩테스트 연습 - 위장 programmers.co.kr 문제설명: clothes배열 안에 아이템 이름과 아이템 종류가 배열로 들어있는 2차원 배열 형태이다. 같은 종류 중 1개의 아이템만 사용하여 총 몇가지의 조합을 만들 수 있는 지 구하는 문제이다. 단, 아무것도 선택하지 않는 경우는 없다. [1차 시도] def solution(clothes): answer = 1 bin = {} for c in clothes: if c[1] not in bin: bin[c[1]] = [c[0]] else: bin[c[1]].append(c[0]) for k,v in bin.items(): answer*=len(v)+1 return answer-1 풀이: 먼저 clothes배열을 돌면서 아이템 종류별(key)로 아이..
-
프로그래머스> 스택/큐> 프린터ALGORITHM/Programmers 2020. 6. 25. 08:25
코딩테스트 연습 - 프린터 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린�� programmers.co.kr 문제설명: priorities 리스트에 인쇄 요청이 들어온 문서들의 중요도가 나열되어 있고, 이 중 location 위치에 있는 문서가 맨 앞으로 와서 pop할 때의 순서를 반환해야 한다. 즉, location 위치의 문서가 맨 앞에 오고 그 중요도가 priorities 의 숫자들 중 가장 클 때까지 pop과 append를 적절히 반복해주면서 순서를 count해주면 된다. [1차 시도] def solution(priorities, location): answer..
-
프로그래머스> 해시 > 전화번호 목록ALGORITHM/Programmers 2020. 6. 24. 13:26
코딩테스트 연습 - 전화번호 목록 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조�� programmers.co.kr 문제설명: phone_book 리스트에 주어지는 번호들 중 한 개의 번호가 다른 번호의 앞자리와 일치하는지 판별하는 문제이다. 즉 이 조건을 한 번이라도 만족한다면 false를 반환하고, 그렇지 않으면 주어지는 defult 값 true를 반환한다. [1차 시도] def solution(phone_book): answer = True i = 0 while i != len(phone_book)-1: for p in phone_book: if phone_boo..