반응형

➰ 취업준비/알고리즘 문제풀이 39

[Python][프로그래머스] level 2 - 땅따먹기

문제 코딩테스트 연습 - 땅따먹기 땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟 programmers.co.kr 풀이과정 연속으로 놓여있는 수는 지날수 없기 때문에 하나의 행에서 선택할 수 있는 수는 가장 큰 수, 두번째로 큰 수로 두가지밖에 없습니다. 그렇게 때문에 아래와 같은 방식으로 최댓값을 구할 수 있습니다. 1. 행에서 가장 큰수 maxNum, 두번째로 큰 수 secondMaxNum 를 구합니다. 2. n-1 행의 maxNum 의 인덱스를 maxIdx, secondMaxNum 의 인덱스를 secondMaxIdx 라고 할때, n행에서 max..

[Python][프로그래머스] level 2 - 순위 검색 (딕셔너리, 이진탐색)

문제 0) queryScore = int(tempArr[-1]) 해당 key 가 딕셔너리에 값이 있는지, 있다면 query 에 있는 점수보다 크거나 같은 점수는 몇개가 있는지 계산하기만 하면 됩니다. 하지만 만약 하나의 쿼리에 속한 점수들의 배열이 너무 길어서 검색하는 시간이 길어져 시간초과 날수도 있습니다. 이를 해결하기위해 이분탐색을 사용할 예정이므로 미리 value 들을 정렬해둡니다. for key in infoDict.keys(): infoDict[key].sort() 그리고 lower_bound 를 계산해주는 bisect_left 를 통해 query 내의 점수보다 점수가 높은 개수를 계산하여 출력하면 됩니다. answer = [] for x in query: tempArr = list(y for..

[Python][백준_1012] 유기농 배추 (BFS)

문제 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 풀이과정 아래의 예시로 설명을 해보겠습니다. 1 10 8 17 0 0 1 0 1 1 4 2 4 3 4 5 2 4 3 4 7 4 8 4 9 4 7 5 8 5 9 5 7 6 8 6 9 6 위의 경우를 arr 에 저장해보면 아래와 같은 결과가 나옵니다. (0은 생략) 한마리의 지렁이가 서로 붙어있는 배추들을 보호할 수 있기 때문에 아래와 같이 5마리의 지렁이로 모든 배추를 보호 할 수 있습니다. 아래의 코드로 보호되지 못한 배추의 위치를 찾고 def getPosition(N..

[Python][백준_2493] 탑

문제 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net 풀이과정 처음에는 완전탐색으로 풀었더니 시간초과가 발생했다. N = int(input()) arr = list(map(int, input().split())) answer = [] for i in range(N): answer.append(0) for j in range(i-1, -1, -1): if arr[i] < arr[j]: answer[-1] = j+1 break for a in answer: print(a, end=" ") < Stack을 사용한..

[Python][프로그래머스] level 2 - 프렌즈4블록

문제 코딩테스트 연습 - [1차] 프렌즈4블록 프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙 programmers.co.kr 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙어있을 경우 사라지면서 점수를 얻는 게임이다. 만약 판이 위와 같이 주어질 경우, 라이언이 2×2로 배치된 7개 블록과 콘이 2×2로 배치된 4개 블록이 지워진다. 같은 블록은 여러 2×2에 포함될 수 있으며, 지워지는 조건에 만족하는 2×2 모양이 여러..

[Python][프로그래머스] level 3 - 보석쇼핑

문제 코딩테스트 연습 - 보석 쇼핑 ["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7] programmers.co.kr [본 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제입니다.] 개발자 출신으로 세계 최고의 갑부가 된 어피치는 스트레스를 받을 때면 이를 풀기 위해 오프라인 매장에 쇼핑을 하러 가곤 합니다. 어피치는 쇼핑을 할 때면 매장 진열대의 특정 범위의 물건들을 모두 싹쓸이 구매하는 습관이 있습니다. 어느 날 스트레스를 풀기 위해 보석 매장에 쇼핑을 하러 간 어피치는 이전처럼 진열대의 특정 범위의 보석을 모두 구매하되 특별히 아래 목적을 달성하고 싶었습니다. 진열된 모든 종류의 보석을 적어도 1개 이상 포함하는..

[Python][프로그래머스] level 1 - 실패율

문제 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다. 이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하라. 실패율은 다음과 같이 정의한다. 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수 전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 ..

[Python][프로그래머스] level 1 - [1차] 다트 게임

문제 카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다. 갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다. 다트 게임은 총 3번의 기회로 구성된다. 각 기회마다 얻을 수 있는 점수는 0점에서 10점까지이다. 점수와 함께 Single(S), Double(D), Triple(T) 영역이 존재하고 각 영역 당첨 시 점수에서 1제곱, 2제곱, 3제곱 (점수1 , 점수2 , 점수3 )으로 계산된다. 옵션으로 스타상(*) , 아차상(#)이 존재하며 스타상(*) 당첨 시 해당 점수와 바로 전에 얻은 ..

[Python][프로그래머스] level 1 - 문자열 내 마음대로 정렬하기

문제 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다. 제한 조건 strings는 길이 1 이상, 50이하인 배열입니다. strings의 원소는 소문자 알파벳으로 이루어져 있습니다. strings의 원소는 길이 1 이상, 100이하인 문자열입니다. 모든 strings의 원소의 길이는 n보다 큽니다. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다. 입출력 예 strings n return ["sun", "bed"..