Algorithm/프로그래머스 39

프로그래머스 자물쇠와 열쇠 문제 풀이 - [세무민의 코딩일기]

ㅋ안녕하세요 세기무민입니다. 이번에 풀어볼 문제는 2020년도 카카오 블라인트 문제 중 하나인 자물쇠와 열쇠 문제입니다. 문제 설명 입출력 예시 문제 풀이 흠.... 개인적으로 일단 이번 문제에서 포인트는 배열 회전하는 것이라고 생각한다. 파이썬에서 배열 회전에 사용되는 내장 함수 중 Zip이라고 있는데 이걸 사용하여 0 / 90 / 180 / 270도 회전하여 한번씩 key를 넣어보면 되는 문제이다. 아래의 그림으로 좀더 쉽게 설명해보면 간단한 예시로 Lock과 Key의 값은 위와 같고 0도부터 하나씩 Lock에 Key를 넣어줍니다. 넣었을 때 Lock의 모든 값이 1이라면 True를 반환해주면 되고 0, 90, 180, 270도 회전하여 동일하게 하나씩 탐색했음에도 불구하고 모든값이 1인 경우가 없다..

프로그래머스 비밀지도 문제 풀이 - [세무민의 코딩일기]

안녕하세요 세기무민입니다. 이번에 풀어볼 문제는 2018년도 카카오 블라인드 테스트 1차 비밀지도 문제입니다. 문제 설명 입출력 및 예시 문제 풀이 이번 문제는 위의 설명대로 문제를 접근하면 됩니다. 요약을 하자면 1. 2진수로 변환하기 2. 2진수로 변환한 수의 자리수를 맞춰주기 3. 2진수로 변환한 값들을 비교 및 #으로 출력 arr1과 arr2의 값들을 2진수로 변환해서 두개를 합쳤을 때 1인 경우에 #으로 표시해주면 됩니다. 여기서 2진수로 변환하는 방법이 여러가지가 있지만 저는 format을 이용하였습니다. 2진수로 변환을 완료했다면 다음으로 확인할 것은 해당 배열의 자리수와 일치하는지 확인이 필요하고 만약 자리수가 다르면 자리수를 맞춰주면 됩니다. 마지막으로 자리수를 맞췄다면 해당 값들을 비교..

프로그래머스 키패드 누르기 문제풀이- [세무민의 코딩일기]

안녕하세요 세기무민입니다. 이번에 돌아온 포스팅은 프로그래머스 알고리즘 풀이 문제로 돌아왔습니다. 문제설명 입출력 예시 문제풀이 우선 저는 이 문제를 보자마자 메모장에 그림을 그렸습니다. 전화기가 위와 같이 있다고 가정하면 일단 왼쪽의 숫자들은 3으로 나눴을 때 나머지가 1인 경우의 수 오른쪽의 숫자들은 3으로 나눴을 때 나머지가 0인 경우의 수라는 것을 알 수 있습니다. 그런 뒤 이 문제에서 가장 중요한건 가운데 숫자를 클릭하는 방법인데 우선은 가운데 숫자들은 3가지의 조건을 생각해봤습니다. 1. 왼쪽과 오른쪽의 길이가 같은 경우 2. 왼쪽이 오른쪽 길이보다 큰 경우 3. 오른쪽이 왼쪽 길이보다 큰 경우 위와 같이 3가지로 나눌 수 있는데 그렇다면 어떻게 길이를 구분할 지 고민해본 끝에 좌표 이동을 생..

[세무민의 코딩일기] 프로그래머스 : 우유와 요거트가 담긴 장바구니 문제 풀이

오늘 포스팅 할 내용은 Summer/Winter Coding(2019) 문제에 나온 우유와 요거트가 담긴 장바구니 문제를 풀어봤습니다. 1. 문제 설명 2. 문제 및 예시 3. 문제 풀이 이번 문제는 위의 내용처럼 우유와 요거트 2개를 모두 가지고 있는 CART_ID를 구하면 됩니다. 그렇기 때문에 조건식에 우유와 요거트가 각각 존재하는지 구분하여 검색해주면 됩니다. ## 방법 1 SELECT DISTINCT CART_ID FROM CART_PRODUCTS WHERE NAME = 'Milk' AND CART_ID IN (SELECT DISTINCT CART_ID FROM CART_PRODUCTS WHERE NAME = 'Yogurt') ## 방법 2 SELECT DISTINCT milk_tb.CART_I..

[세무민의 코딩일기] 프로그래머스 : 헤비 유저가 소유한 장소 문제 풀이

오늘 포스팅 할 내용은 2021년도 Dev-Matching: 웹 백앤드 개발자 문제에 나온 헤비 유저가 소유한 장소 문제를 풀어봤습니다. 1. 문제 설명 2. 문제 및 예시 3. 문제 풀이 이번 문제는 말 그대로 HOST_ID가 2개 이상인 경우를 헤비 유저고 부른다. 따라서 HOST_ID가 1개 이상인 경우를 조회하면 된다. SELECT ID, NAME, HOST_ID FROM PLACES WHERE HOST_ID IN ( SELECT HOST_ID FROM PLACES GROUP BY HOST_ID HAVING COUNT(1) > 1 ); 위의 코드처럼 작성하여 1개 이상의 HOST_ID를 가진 값을 출력해줬다. 4. 결과 자세한 코드는 아래의 github에 업로드해놨습니다! GitHub - sg-m..

프로그래머스 실패율(2019 KAKAO BLIND RECRUITMENT) 문제 풀이

이번에 풀어볼 알고리즘 문제는 실패율 문제 풀이입니다. 1. 문제 설명 2. 제한 사항 및 입출력 3. 문제 풀이 이번 문제는 스테이지 별로 구분할 필요가 있다. 예를 들어서 N은 5, Stage는 [2, 1, 2, 6, 2, 4, 3, 3]을 그대로 풀이해보자. 스테이지의 개수는 5, 즉 Stage가 가질 수 있는 값은 최대 5이며 그 이상은 제외하면 된다. Stage를 나눠보면 2는 3명, 1은 1명, 3은 2명, 4는 1명 그리고 6은 스테이지 개수에 없기 때문에 제외한다. 1스테이지부터 N스테이지까지 수를 아래의 표로 볼 수 있다. N : 1 1 / 8 N : 2 3 / 7 N : 3 2 / 4 N : 4 1 / 2 N : 5 0 / 1 stage1의 경우 1개가 존재하기 때문에 전체 stage(..

[세무민의 코딩일기] 위클리 챌린지 8주차 최소직사각형 문제 풀이

이번에 풀어본 문제는 위클리 챌린지 8주차 최소직사각형 문제입니다. 사실 이 문제는 어렵지 않고 쉬운데 커피숍에서 친구 기달리는 시간에 풀어봤습니다. 1. 문제 설명 2. 제한 사항 및 입출력 3. 문제풀이 이번 문제는 카드의 가로와 세로중 가장 큰 값을 구해주면 됩니다. 가로와 세로중 가장 큰 값이라고 하면 해당 값을 정렬해서 가장 큰 값 2개를 곱해주면 끝입니다. 그렇지만 가장 중요하게 봐야 하는 포인트는 카드를 눕힐 때 세로와 가로를 바꿔서 눕힐 수 있다는 점 그 말은 즉 가로에는 가장 큰값들 세로에는 가장 작은값들을 넣은 뒤 정렬해서 그 중에 큰 값을 가져오면 됩니다. 예시 1번을 보면 원래는 80과 70으로 5600이 가장 크지만 (30, 70)을 세로로 눕혀서 80과 다음으로 큰 50으로 40..

[세무민의 코딩일기] 로또의 최고 순위와 최저 순위 문제 풀이

[세무민의 코딩일기] 로또의 최고 순위와 최저 순위 문제 풀이 이번에 풀어본 문제는 2021 Dev-matching : 웹 백앤드 개발 관련하여 출제된 문제이다. 1. 문제 설명 2. 제한사항 및 예시 3. 문제 풀이 방법 이번 문제는 문제 이해만 잘하면 쉽게 풀수 있는 문제입니다. 말 그대로 0을 제외하고 같은 값이 존재하는지 찾아본 뒤에 0값만큼 최고순위에 증가시킨 뒤 순위를 매기면 됩니다. 4. 코드 풀이 def RankCheck(result): return {6:1, 5:2, 4:3, 3:4, 2:5, 1:6, 0:6}.get(result, "rank") def solution(lottos, win_nums): result = [] maxResult = 0 minResult = 0 zeroChec..

[세무민의 코딩일기] 프로그래머스 위클리 챌린지 2주차 상호 평가 문제 풀이

이번 포스팅은 프로그래머스에서 위클리 챌린지 2주차 문제 풀이로 돌아왔습니다. 1. 문제설명 2. 제한사항 및 입출력 예시 3. 문제 풀이 이번 문제에서는 가장 큰 포인트를 둬야하는 문구는 2가지입니다. - 자신이 가장 최대 및 최소로 준 점수라면 제거한다. - 자신이 가장 최대 및 최소라고 생각했으나 동일한 값이 있다면 제거하지 않는다. 이 2가지의 조건만 잘 맞춰주면 문제를 풀 수 있습니다. # 처음 코드 def solution(score): result = "" for i in range(len(score)): maxCheck = 0 minCheck = 0 maxSize = list() for j in range(len(score[i])): maxSize.append(score[j][i]) maxC..

[세무민의 코딩일기] 프로그래머스 주식가격 문제 풀기

오늘 풀어볼 문제는 프로그래머스 스택/큐 문제 중 하나인 주식가격 문제입니다. 1. 문제 설명 및 제한 사항 2. 입출력 예시 3. 문제 풀이 제가 생각한 문제 풀이 방법은 위와 같습니다. 해당 i번째의 값을 기준으로 뒤에 나오는 값이 하락하는 경우 -1을 해주면 됩니다. 그리고 하락과 상승폭을 구한 값과 해당 i번째 기준으로 arr의 마지막까지의 길이의 합을 구해주면 됩니다. 코드는 아래와 같습니다. # 1번 풀이(Stack 이용 - 시간초과) from collections import deque def solution(prices): stacks = deque(prices) result = [] temp = 0 count = 0 inputprice = 0 numbers = 0 while len(sta..