새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기

프로그래머스60

[프로그래머스] 불량 사용자 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 이해 및 접근 불량 사용자를 응모자 아이디와 비교하여 제재 가능한 아이디 목록을 만들어 주었습니다. 이때 좀 더 빠른 탐색을 위해, 응모자 아이디를 길이순, 알파벳순으로 정렬하여 앞에서 탐색하였고, 길이를 초과하면 탐색을 멈추도록 하였습니다. 재귀를 이용하여 제재 아이디를 만들 수 있는 경우를 구해주었습니다. 2) 알고리즘 문자열 3) 풀이 코드 사용 언어 - Python def solution(user_id, banned_id): answer = set() # 제재 아이디 가능한 경우들 집합 user_id = list(sorted(user_id, key=lambda x: (len(x), x))) # 유저 아이디를 길이순, 알파벳순으로 정렬 cases = [[] f.. 2022. 2. 16.
[프로그래머스] 보석 쇼핑 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 이해 및 접근 하나의 배열에서 조건을 만족하는 구간을 구해야 했으므로 투포인터로 접근하였습니다. 시작점을 기준으로 하여, 조건을 찾은 후에 시작점을 한칸만 이동하여 다음 구간을 찾게 되면 시간초과 문제가 발생할것으로 생각했습니다. 또한, 짧은 구간이 여러개일 경우 시작 진열대 번호가 작은 구간을 출력하여야 했으므로 배열의 오른쪽에서 왼쪽으로 탐색을 시도하였습니다. 우선, 오른쪽 포인터를 기준으로 하여 왼쪽 포인터를 이동 시키며 조건을 만족하는 구간을 구했습니다. 그리고 왼쪽 포인터를 기준으로 오른쪽 방향으로 진행하여 더 짧은 구간이 존재하는지 탐색하였습니다. 구간의 길이를 구했다면, 다음 탐색을 위해 오른쪽 포인터보다 한칸 앞에서 기준을 잡아 탐색하였습니다. 2) .. 2022. 2. 15.
[프로그래머스] 자물쇠와 열쇠 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 이해 및 접근 키가 회전이 가능하므로 회전했을때 모습을 구하였습니다. 키를 자물쇠 가장 오른쪽 하단부터 한칸씩 이동하며 열수 있는지 없는지 판별하였습니다. 2) 알고리즘 구현 3) 풀이 코드 사용 언어 - Python def solution(key, lock): K, L = len(key), len(lock) # 키와 자물쇠의 한변의 길이 keys = [[[0] * K for _ in range(K)] for _ in range(4)] # 회전한 키의 모양들을 담을 리스트 for i in range(K): for j in range(K): keys[0][i][j] = key[i][j] # 정방향 keys[1][i][j] = key[K-1-j][i] # 90도 회전 .. 2022. 2. 14.
[프로그래머스] 길 찾기 게임 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 이해 및 접근 주어진 노드의 정보들을 이용하여 트리를 만들어내려 하였습니다. 그러나 트리를 만드는 과정에 다소 조건이 많았기에, 트리를 생성하지 않고 이진트리의 순회하는 방식의 특징을 이용하였습니다. 순회를 할때 현재 노드를 중심으로 하여 왼쪽 자식 노드와 오른쪽 자식 노드를 구하여 순회를 하였습니다. 2) 알고리즘 트리 3) 풀이 코드 사용 언어 - Python import sys sys.setrecursionlimit(10000) def solution(nodeinfo): answer = [[], []] # 전위 순회, 후위 순회 nodeinfo = list(sorted(enumerate(nodeinfo, start=1), key=lambda x: (x[1][1.. 2022. 2. 13.
[프로그래머스] 방금그곡 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 이해 및 접근 특정 패턴이 여러 문자들 중 포함되는지 여부를 판별해야 하므로 KMP 알고리즘으로 접근하였습니다. 2) 알고리즘 KMP 3) 풀이 코드 사용 언어 - Python def solution(m, musicinfos): def separate(s): # 문자열 음을 리스트 형태로 나누어주는 함수 result = [] # 리스트로 변형된 음 for c in s: if c == '#': # 현재 인덱스가 # 이라면, 이전에 기록한 음에 # 이 붙어야하므로 result.append(f'{result.pop()}{c}') # 마지막 요소를 꺼낸 후 뒤에 붙여서 다시 추가 else: # 현재 문자가 # 이 아니라면 반환할 리스트에 항목 추가 result.append.. 2022. 2. 10.
[프로그래머스] 뉴스 클러스터링 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 이해 및 접근 문자열을 특정 길이로 모두 자른 후 알파벳인 경우에만 판별을 하여야하므로 영문자를 판별하는 isalpha 메서드를 사용하였습니다. 단순히 집합을 이용하면 중복되는 문자들은 1개만 남게 되는데, 문제에서는 중복을 유지시켜야 했기 때문에 딕셔너리를 이용하여 중복을 유지시켰습니다. 2) 알고리즘 문자열 3) 풀이 코드 사용 언어 - Python def solution(str1, str2): one, two = {}, {} # 문자열들을 2글자씩 자른 갯수를 카운트하는 딕셔너리 변수 intersection = 0 # 교집합의 개수 union = 0 # 합집합의 개수 for i in range(1, len(str1)): # 첫번째 문자열의 두글자가 문자열로만 .. 2022. 2. 1.
[프로그래머스] 입국심사 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 이해 및 접근 시뮬레이션으로 풀이를 진행하려 하였으나, 입력 조건의 범위가 너무 크기에 시간초과 발생을 예상했습니다. 많은 인원의 연산을 위해 이분탐색을 이용하였습니다. 2) 알고리즘 이분탐색 3) 풀이 코드 사용 언어 - Python def solution(n, times): times.sort() # 이분 탐색을 위한 정렬 answer = 0 l, r = 0, times[-1] * n # 모든 심사관의 소요되는 최소 시간, 최대 시간 while l = n: # 현재 심사관까지 심사했는데, 모든 인원 심사가 가능한 경우 answer = mid # 현재 전체 소요 시간 저장 r = mid - 1 # 더 짧은 시간으로 가능한지 탐색을 위한 설정 break else: .. 2022. 1. 25.
[프로그래머스] 게임 맵 최단거리 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 이해 및 접근 최단거리로 목표지점에 이동하고, 최단 거리를 알아야하므로 BFS 로 접근하였습니다. 2) 알고리즘 BFS 3) 풀이 코드 사용 언어 - Python from collections import deque dr = [-1, 0, 1, 0] # 상 우 하 좌 dc = [0, 1, 0, -1] def solution(maps): N = len(maps) # 세로 M = len(maps[0]) # 가로 visited = [[0] * M for _ in range(N)] # 방문 여부 def solution(): # 내부함수, BFS 탐색 q = deque([(0, 0)]) visited[0][0] = 1 # 시작점 방문 처리 while q: node = q.p.. 2022. 1. 24.
[프로그래머스] 튜플 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 이해 및 접근 원소들이 순서가 랜덤하게 있을 수 있으므로 길이 순서대로 정렬하였습니다. 또한 원소들을 집합으로 구분하여 현재 없는 원소를 쉽게 찾아내도록 사용하였습니다. 2) 풀이 코드 사용 언어 - Python def solution(s): answer = [] li = sorted(s[2:-2].split('},{'), key=lambda x: len(x)) # 양 끝의 중괄호 삭제, '},{' 기준으로 원소들 구분 후 원소의 개수순으로 정렬 for e in li: # 각 원소들 반복 num = set(e.split(',')) - set(answer) # 정답에 있는 현재 길이의 원소와 정답 원소들의 차집합을 구함 answer.append(num.pop()) #.. 2022. 1. 17.
[프로그래머스] 타겟넘버 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 이해 및 접근 특정 자릿수의 숫자가 더하기 아니면 빼기를 진행하여야 하므로 각 자리마다 두가지의 경우가 생깁니다. 첫번째 반복문에서 모든 경우의 수를 반복하고, 두번째 반복문에서 각 자릿수마다 확인하여 더하기와 빼기를 진행합니다. 2) 알고리즘 완전탐색 3) 풀이 코드 사용 언어 - Python def solution(numbers, target): answer = 0 # 정답의 개수 for i in range(1 2022. 1. 16.
[프로그래머스] 수식 최대화 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 이해 및 접근 입력이 하나의 문자열로 주어지므로 각 문자열을 반복하여 숫자들과 연산자들을 각각 다른 리스트에 정리하였습니다. 연산자의 우선순위를 바꿔서 임의로 선정이 가능하여, 순열을 통해 경우의 수를 모두 구했습니다. 숫자와 연산자 리스트를 같이 순환하며 우선순위가 높은 연산자를 만나면 계산 하여 새로 저장했습니다. 연산자의 종류가 세가지이므로 세번 반복하여 풀이를 진행하였습니다. 2) 알고리즘 구현 3) 풀이 코드 사용 언어 - Python from itertools import permutations def solution(expression): answer = 0 # 정답 변수 op = ['*', '+', '-'] # 연산자 기호 _num_list = [] .. 2022. 1. 10.
[프로그래머스] 보호소에서 중성화한 동물 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 이해 및 접근 보호소 들어올때와 나갈때의 정보를 모두 알아야 하므로 조인으로 접근했습니다. WHERE 으로 특정 조건에 맞게 설정하였습니다. 2) 풀이 코드 사용 언어 - MySQL SELECT ai.animal_id, ai.animal_type, ai.name -- 출력 열 FROM animal_ins AS ai JOIN animal_outs AS ao ON ai.animal_id = ao.animal_id -- 조인 WHERE ai.SEX_UPON_INTAKE LIKE "Intact%" AND ao.SEX_UPON_OUTCOME IN ("Spayed Female", "Neutered Male") -- 들어올때 중성화 되지 않았으나 나갈때 중성화 된 동물들 ORD.. 2022. 1. 9.