목록알고리즘 (57)
어디까지 갈 수 있을까?
문제링크 programmers.co.kr/learn/courses/30/lessons/17683 [답코드] def change(note): note=note.replace('C#','c') note=note.replace('D#','d') note=note.replace('F#','f') note=note.replace('G#','g') note=note.replace('A#','a') return note def solution(m, musicinfos): arr=[] #[제목, 음표] m=change(m) for mm in musicinfos: start, end, title, sound=mm.split(',') sound=change(sound) start_hour, start_min, end_ho..
문제링크 programmers.co.kr/learn/courses/30/lessons/42578 [답코드] def solution(clothes): answer = 1 dict={} for c in clothes: if c[1] not in dict: dict[c[1]]=1 else: dict[c[1]]+=1 for k, v in dict.items(): answer*=(v+1) return answer-1 [풀이법] 해당 예시에서 생성되는 dict는 {'headgear': 2, 'eyewear': 1} 이다. 여기서 headgear를 안 쓰는 경우, 1번 headgear를 쓰는 경우, 2번 headger를 쓰는 경우 3가지가 있다 eyewear를 안 쓰는 경우, 1번 eyewear를 쓰는 경우 2가지가..
문제링크 programmers.co.kr/learn/courses/30/lessons/77485 [답코드] def solution(rows, columns, queries): answer = [] graph = [[] for _ in range(rows)] value = 1 for i in range(rows): for j in range(columns): graph[i].append(value) value += 1 for x1, y1, x2, y2 in queries: x1, y1, x2, y2 = x1-1, y1-1, x2-1, y2-1 tmp = graph[x1][y1] min_v = tmp for x in range(x1, x2): graph[x][y1] = graph[x + 1][y1] min_..
문제링크 programmers.co.kr/learn/courses/30/lessons/60059 [답코드] import copy def rotate(key): copy_key=copy.deepcopy(key) for i in range(len(key)): for j in range(len(key)): copy_key[j][-i-1]=key[i][j] return copy_key def check(n, m, copy_lock): for i in range(m, n+m): for j in range(m, n+m): if copy_lock[i][j]!=1: return False return True def add(i, j, copy_lock, key): for k in range(len(key)): for ..
문제링크 programmers.co.kr/learn/courses/30/lessons/72410 처음에는 함수 여러개를 만들어서 다 비교하다가 정규표현식으로 풀면 깔끔하길래 풀어봤다 [답코드] import re def solution(new_id): st=new_id st=st.lower() st=re.sub('[^a-z0-9-_.]','',st) st = re.sub('[.]+', '.', st) st = re.sub('^[.]|[.]$', '', st) if len(st)==0: st = 'a' else: st=st[0:15] st = re.sub('^[.]|[.]$', '', st) if len(st)
내가 부족한 것 - 입력수보고 알고리즘 유추하기 - 최고가 아니라도 내가 할 수 있는 최선으로 - in & not in 잘 쓰기 - 문제의 기초 정의에 입각해 푸는 것 - 부분적으로 쪼개서 생각하는 것 - 시간 복잡도를 낮추기 위해 메모리를 더 쓰기 - 최단거리 -bfs(가중치 동일), 다익스트라(가중치 다름) - 가지치기 dfs - 오래 걸리면 아이디어만 주석으로 달아놓고 넘어가기 DFS - 종료조건 - 반복문을 간결하게 표현(반복문으로 될 것 같은데 인자값이 계속 변할 때) - 트리로 이해하기 - depth=재귀함수 call하는 횟수 - 방향 없이 쭉 이어지는 느낌 DP - 처음 : 다 만들어 볼까? -> 너무 많으면 DP -영향을 주는 요인 갯수에따라 배열 차원을 나눈다 -현재 값과 현재값의 이후면..
문제링크 www.acmicpc.net/problem/16236 본인보다 크기가 작고 거리가 작으며, 가장 위에 있는 혹은 가장 왼쪽에 있는 물고기를 먹는 문제이다 조건이 많아 까다로웠다 [답코드] 1. 처음 구현 import sys from heapq import heappop, heappush from collections import deque input=sys.stdin.readline def dfs(): # 거리를 알기 위한 완전탐색 m = deque() # 움직일 좌표를 담아두는 m m.append([0, shark[0], shark[1]]) visit = [[False] * n for _ in range(n)] move = [[-1, 0], [1, 0], [0, -1], [0, 1]] visi..
문제링크 www.acmicpc.net/problem/14501 처음에 DFS로 시도했는데 너무 어려워서 DP로 노선 변경하니까 금방 풀렸다,,,ㅎ 현재 일에 도달할 수 있는 날들 중 최대값을 찾아 현재 price+최대 price를 더해가면서 누적하면 풀리는 문제 [답코드] import sys input=sys.stdin.readline n=int(input()) t=[] p=[] for _ in range(n): a, b = map(int, input().split()) t.append(a) p.append(b) # print(t, p) # p에는 선택될 수 있는 값 중 가장 큰 값을 누적시킨다 for i in range(n): max_value=0 for j in range(i): if j+t[j]