파이썬 26

프로그래머스 괄호 회전하기

https://programmers.co.kr/learn/courses/30/lessons/76502 코딩테스트 연습 - 괄호 회전하기 programmers.co.kr 이 문제는 보자마자 떠오르는대로 풀면 간단히 풀릴거라 예상했고 실제로 떠오른대로 푸니 간단했다. 하지만 이 문제는 얼마든지 더 간단한 규칙을 찾을 수 있을 것 같다는 생각이 든다.. 내가 푼 풀이는 그저 주어진 문자열의 길이만큼 문자를 한칸씩 이동하며 올바른 괄호 문자열인가 검사하고 맞다면 정답에 +1 을 해주는것이다. 다른사람의 풀이에 훨씬 간단한 규칙을 찾아서 푼 고수분들이 계실거라 기대하며 봤지만 내가 푼 풀이와 동일했다. from collections import deque def solution(s): answer = 0 if l..

이코테 게임개발

알고리즘 문제를 잘 풀려면 일단은 피지컬이 좋아야겠다고 생각이 들었다. 여기서 말하는 피지컬이란 내 생각을 코드로 구현할 수 있는 능력이다. 일단 기본이 되는 피지컬을 좀 키우고 여러가지 기법들에 대해 배워 나가야 겠다는 생각이 들어, 이코테의 구현문제를 하나 풀어봤다. 알고리즘 피지컬을 키우는건 기본체력을 키우는것과 비슷하지 않을까... 문제 현민이는 게임 캐릭터가 맵 안에서 움직이는 시스템을 개발 중이다. 캐릭터가 있는 장소는 1 X 1 크기의 정사각형으로 이뤄진 N X M 크기의 직사각형으로, 각각의 칸은 육지 또는 바다이다. 캐릭터는 동서남북 중 한 곳을 바라본다. 맵의 각 칸은 (A, B)로 나타낼 수 있고, A는 북쪽으로부터 떨어진 칸의 개수, B는 서쪽으로부터 떨어진 칸의 개수이다. 캐릭터는..

프로그래머스 메뉴리뉴얼

https://programmers.co.kr/learn/courses/30/lessons/72411 코딩테스트 연습 - 메뉴 리뉴얼 레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 programmers.co.kr 약간헤매기도 했고, 재미도 있었던 문제다. 잠깐 생각해보고 길은 제대로 봤는데 구현이 생각보다 좀 오래 걸린듯하다. 풀면서도 이렇게 푸는게 맞는가 싶고, 다 풀고나서도 뭔가 어거지로 푼 느낌이 강한데, 다른 사람의 풀이보기 로 보니 코드가 좀 더 세련됐냐 안세련됐냐의 차이뿐.. 방법은 대동소이했다. 이 문제를 풀면서 바로 떠올린게 combinations 고 두번째..

프로그래머스 괄호변환 파이썬

https://programmers.co.kr/learn/courses/30/lessons/60058 코딩테스트 연습 - 괄호 변환 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 programmers.co.kr 이 문제는 문제의 조건이 너무 상세하게 나와서 그냥 문제 조건에 나온 내용을 코드로 그대로 옮겼더니 풀렸다. 별로 어려울건 없었는데 문제 설명 중, 균형잡힌괄호문자열의 의미를 잠깐 잘못 이해했다. 균형잡힌문자열은 열린괄호와 닫힌괄호의 수가 같은 것이다. 문제 조건 중 '단, u는 "균형잡힌 괄호 문자열"로 더 이상 분리할 수 없어야 하며' 라는 부분이 있는데 이 ..

짝이맞지않는괄호 파이썬

def solution(brackets): o = '({[' c = ')}]' if brackets[0] in c: return False if brackets[-1] in o: return False if len(brackets) % 2 == 1: return False s = [] for b in brackets: if b in o: s.append(b) if b in c: if s[-1] in o and o.index(s[-1]) == c.index(b): s.pop() else: return False return len(s) == 0 print(solution('({[}])')) # 3 # ()() # ({[}]) # ({}[(){}]) 갑자기 문득 예전에 풀었던게 떠올라서 풀어봤다. 쉽다 열린..

프로그래머스 프린터 파이썬

https://programmers.co.kr/learn/courses/30/lessons/42587 코딩테스트 연습 - 프린터 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린 programmers.co.kr 문제만 봐도 우선순위에 따라 인쇄할 종이를 앞에서 맨뒤로 보내야할 일이 많을것 같았으므로 일단 deque 를 사용했다. 나의 경우, 순서를 기록하고 있는 배열을 추가로 만들어서 우선순위 배열의 값이 조정될때 (맨뒤로 보내거나 프린트될때) 순서배열 역시 동일하게 기록을 해줬고, 프린트해야하는 시점의 값이(순서가) location 과 동일하다면 기록해뒀던 answer ..

프로그래머스 기능개발 파이썬

https://programmers.co.kr/learn/courses/30/lessons/42586 코딩테스트 연습 - 기능개발 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 programmers.co.kr 처음엔 아래와 같이 풀었다 def solution(progresses, speeds): answer = [] temp = 0 while progresses: if progresses[0] >= 100: del progresses[0] del speeds[0] temp += 1 else: if temp > 0: answer.append(temp) temp ..

프로그래머스 섬 연결하기 파이썬

https://programmers.co.kr/learn/courses/30/lessons/42861 코딩테스트 연습 - 섬 연결하기 4 [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] 4 programmers.co.kr 크루스칼 알고리즘을 이용하면 쉽고 빠르게 풀 수 있는 문제이다. 이 문제를 처음 접했을 때는 크루스칼 알고리즘을 모르고 있었다. 크루스칼 알고리즘을 모르는채로 대강 계획을 잡고 풀어보려했는데 생각보다 구현이 잘 안돼서 질문/답변 을 확인하다가 크루스칼 알고리즘을 알게 되었다. import heapq def get_parent(c, node): if c[node] == node: return node return get_parent(c, c[node]) def ..

프로그래머스 구명보트 파이썬

https://programmers.co.kr/learn/courses/30/lessons/42885 코딩테스트 연습 - 구명보트 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5 programmers.co.kr 이전에 풀었던 큰수만들기 를 약간은 무식하게 풀고나서 다른사람의 풀이를 보고 뭔가 느낀바가 있다. 뭐라고 말로 표현하기 어려운데 굳이 표현하자면 컴퓨터공학도 처럼 생각하자 는 것이다. 이번 문제를 풀 때 그런 생각으로 임했고 아래와 같이 깔끔하게 풀었다. 만족스러운 깔끔한 코드다. 물론 문제자체도 무척 쉬웠다. 이 문제를 풀기 위해서 ..

프로그래머스 큰 수 만들기 파이썬

https://programmers.co.kr/learn/courses/30/lessons/42883 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr def solution(number, k): answer = [] number = list(map(int, number)) start = 0 ans_len = len(number) - k remain = ans_len - len(answer) end = len(number) - remain + 1 while len(answer) < len(number) - k: max_val = -1 temp_s = start temp_e = end remain = ans_len - len(answer) # print((start, end)) # prin..