본문 바로가기

알고리즘 문제풀이79

[프로그래머스 Lv2] 행렬 테두리 회전하기:일정한 상수 이전의 값 사용 (구현, 스택, 행렬 값 회전) 프로그래머스 Lv2. 행렬 테두리 회전하기 rows x columns 크기인 행렬이 있습니다. 행렬에는 1부터 rows x columns까지의 숫자가 한 줄씩 순서대로 적혀있습니다. 이 행렬에서 직사각형 모양의 범위를 여러 번 선택해, 테두리 부분에 있는 숫자들을 시계방향으로 회전시키려 합니다. 각 회전은 (x1, y1, x2, y2)인 정수 4개로 표현하며, 그 의미는 다음과 같습니다. x1 행 y1 열부터 x2 행 y2 열까지의 영역에 해당하는 직사각형에서 테두리에 있는 숫자들을 한 칸씩 시계방향으로 회전합니다. 다음은 6 x 6 크기 행렬의 예시입니다. 이 행렬에 (2, 2, 5, 4) 회전을 적용하면, 아래 그림과 같이 2행 2열부터 5행 4열까지 영역의 테두리가 시계방향으로 회전합니다. 이때, .. 2023. 9. 12.
[프로그래머스 Lv2] 수식 최대화 (구현, 연산자 순서) [카카오 인턴] 수식 최대화 문제 설명 IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과 같은 방식으로 결정하려고 합니다. 해커톤 대회에 참가하는 모든 참가자들에게는 숫자들과 3가지의 연산문자(+, -, *) 만으로 이루어진 연산 수식이 전달되며, 참가자의 미션은 전달받은 수식에 포함된 연산자의 우선순위를 자유롭게 재정의하여 만들 수 있는 가장 큰 숫자를 제출하는 것입니다. 단, 연산자의 우선순위를 새로 정의할 때, 같은 순위의 연산자는 없어야 합니다. 즉, + > - > * 또는 - > * > + 등과 같이 연산자 우선순위를 정의할 수 있으나 +,* > - 또는 * > .. 2023. 9. 12.
프로그래머스 LV2 # 가장 중요한 것: 변수에 내가 원하는 값이 제대로 들어가고 있는지 먼저 테스트하는 것. # 이 부분을 빨리 캐치하지 못하면 로직을 제대로 짜고도 '왜 안나오지'만 반복하게 된다. from collections import deque def solution(q1, q2): # if (sum(q1) + sum(q2)) % 2 != 0: return -1 if sum(q1) == sum(q2) : return 0 # n = len(q1) q1 = deque(q1) q2 = deque(q2) sum1 = sum(q1) sum2 = sum(q2) cnt = 0 while sum1 != sum2: if cnt >= 4*n: return -1 if sum1 < sum2: v = q2.popleft() q1.app.. 2023. 9. 7.
[프로그래머스 lv2] 124 나라의 숫자 일단 5*10^7 이기 때문에 logn 필요해서 힌트 얻기 3진법과 유사하지만 나머지가 0이 아니라 3이 된다는 게 다르다 따라서 진수 계산을 응용하되 이 특징을 살려서 구현해야 한다. # 내 풀이(틀린풀이) def sosu(n): s = '' while n>0: s += str(n%3) n = n//3 return s[::-1] def solution(n): res = [int(x) for x in sosu(n)] for i, d in enumerate(sosu(n)): if d == '0': res[i] = 3 res[i-1] = res[i-1]-1 res = str(int(''.join(map(str,res)).replace('3','4'))) return res # 내 풀이2(정답풀이) # 이진변.. 2023. 7. 31.
[프로그래머스] 고득점 Kit - 완전 탐색 [내 풀이] # 굳이 sizes 다시 정의할 필요 없이, min, max만 활용하면 됐다. def solution(sizes): sizes = [sorted(x) for x in sizes] garo = max([x[0] for x in sizes]) sero = max([x[1] for x in sizes]) return garo * sero [참고 풀이] def solution(sizes): return max(max(x) for x in sizes) * max(min(x) for x in sizes) [내 풀이] def solution(answers): score = [0, 0, 0] p1 = [1, 2, 3, 4, 5] p2 = [2, 1, 2, 3, 2, 4, 2, 5] p3 = [3, 3, 1.. 2023. 6. 22.
[프로그래머스] 연습 문제 [내 풀이] # 피보나치로 푸는 거였구나 .. def solution(n): table = [0]*(n+1) table[1] = 1 table[2] = 2 for i in range(3,n+1): table[i] = table[i-2]+table[i-1] return table[n] [내 풀이] from collections import Counter def solution(k, tangerine): answer = 0 box = 0 counter = Counter(tangerine).most_common() for a, b in counter: box += b answer += 1 if box >= k: return answer [참고 풀이] # tangerine.sort(key = lambda t: .. 2023. 6. 19.
[프로그래머스] 고득점 Kit - 힙 [내 풀이] # 최솟값이 계속 변화하고, 그것을 기준으로 알고리즘이 돌아가야함 => heapq 사용 # 런타임 에러: 아예 불가능한 경우 return -1 를 고려하지 않음 import heapq as hq def solution(scoville, K): scoville.sort() cnt = 0 while len(scoville) >= 2 and scoville[0] = K else -1 더보기 디큐는 https://yunaaaas.tistory.com/36 [내 풀이] # 큐로 한쪽.. 2023. 6. 15.
[프로그래머스] 고득점 Kit - 스택/큐 # 내 풀이 def solution(arr): answer = [] for x in arr: if answer == [] or answer[-1] != x: answer.append(x) return answer # 참고 풀이 # 빈 배열일 가능성이 있는 경우 슬라이싱 활용 # answer[-1] 은 빈 배열일 때 오류가 나지만, answer[-1:]은 오류가 나지 않는다. def solution(arr): answer = [] for x in arr: if answer[-1:] == [x]: continue answer.append(x) return answer # 내 풀이 def solution(progresses, speeds): time = [] for i, x in enumerate(progre.. 2023. 6. 13.
[프로그래머스] 고득점 Kit - 정렬 # 내 풀이 # 최초 테스트 케이스는 통과했지만 [454, 45] 같은 경우는 통과하지 못해서 실패했다. 검색해서 확인해보니 *3을 곱해서 이런 케이스를 걸러내는 작업을 한다. def solution(array, commands): return [sorted(array[i-1:j])[k-1] for i,j,k in commands] # 참고 풀이 # int 인 채로 놔두지 않고, str로 변환한 후에 작업을 시작한다: 문자열 비교와 정수 비교의 비교 방법 차이가 있기 때문이다. def solution(numbers): numbers = list(map(str, numbers)) numbers.sort(key=lambda x: x*3, reverse=True) return str(int(''.join(nu.. 2023. 6. 6.
[프로그래머스] 고득점 Kit - 해시 더보기 https://yunaaaas.tistory.com/46 # 특정 조건인 것들을 제거 하는 것 : Counter 활용해서 특정 조건을 뺄셈할 수 있었다. # 내 풀이 def solution(participant, completion): for par in participant: if par not in completion: return par # 해시 값으로 무슨 값이었는지 추적할 수 있다는 아이디어 def solution(participant, completion): dict = {} sumhash = 0 for part in participant: dict[hash(part)] = part sumhash += hash(part) for comp in completion: sumhash -= h.. 2023. 6. 4.
[프로그래머스] 코딩테스트 기초 [내 풀이] def solution(date1, date2): return 1 if int(''.join(map(str, date1))) - int(''.join(map(str, date2))) 2023. 5. 31.
[프로그래머스] 코딩 기초 트레이닝 #모든 원소들의 곱은 함수가 없기 때문에 직접 구해야 한다. #다른 사람은 m = eval( )을 이용해서 문자열 수식을 만든 다음에 계산했다. [내 풀이] def solution(num_list): gob = 1 for x in num_list: gob = gob*x hob = sum(num_list) return 1 if gob m else 0 [내 풀이] def solution(my_string, is_prefix): return int(my_string[:len(is_pref.. 2023. 5. 22.