
파이썬 코딩테스트 팁
2023. 3. 23. 10:09
Algorithm
입력 받기 import sys input = sys.stdin.readline 2차원 배열 입력 [list(map(int,input())) for _ in range(n)] 출력 print(len(ans),*ans,sep='\n') : 1개씩 출력 ''".join(list) : 모두 붙여서 출력, 시간복잡도 n 리스트 내에서 앞뒤로 비교해야 하는 경우 변수를 만들어 사용하기 or zip 활용하기 (슬라이싱 곁들임) for문 활용법 두개의 값 출력 L = [[1,2],[3,4],[5,6],[7,8]] for i,j in L: 문자열을 돌리는 for문에서 중간에 문자열을 편집해버리면(ex : pop) 문자열이 변경되며 out of range가 나올 수 있기 때문에 유의해야 한다. enumerate 인덱스와 ..
[프로그래머스] Lv.2 n진수 게임
2023. 2. 10. 14:50
Algorithm
문제 이해 : 6분 문제 풀이 : 25분 def solution(n, t, m, p): change = '' for i in range(t*m): change += str(jinsu(i,n)) return change[p-1:t*m:m] def jinsu(num, jin): rev_base = '' if num == 0: return 0 while num > 0: num, mod = divmod(num, jin) if jin > 10 and 10
[프로그래머스] Lv.2 압축
2023. 2. 9. 13:13
Algorithm
문제 이해 : 4분 + 4분 문제 풀이 : 45분(실패) 틀린 풀이 def solution(msg): d = {} for i in range(26): d[chr(i+65)] = i+1 answer = [] tmp = '' for i in range(len(msg)): tmp += msg[i] while True: for j in msg[i+1:]: print(tmp) if tmp in d: if d[tmp] in answer: tmp += j else: # yes answer.append(d[tmp]) tmp += j else: # no d[tmp] = len(d)+1 tmp = '' break break print(d) return answer 생각한 과정 1. 문자가 하나인 경우는 무조건 딕셔너리에 ..
[프로그래머스] Lv.2 k진수에서 소수 구하기
2023. 2. 9. 12:59
Algorithm
문제 이해 : 4분 문제 풀이 : 20분 생각한 과정 1. k진수로 만들어주는 함수 제작 2. 소수를 판정해주는 함수 제작 3. 0을 구간으로 나누어줘야 한다. 생각대로 되었던 풀이었다! 앞선 프로그래머스 튜플 오답노트를 바로 써먹을 수 있어 너무 좋았다 ㅎㅎ import math def solution(n, k): n_jin = jinsu(n,k) answer = 0 tmp_list = [] for i in n_jin: if i != '1' and i != '': tmp_list.append(i) for i in tmp_list: if is_prime(i): answer += 1 return answer def jinsu(n, k): rev_base = '' while n > 0: n, mod = di..
[프로그래머스] Lv.2 뉴스 클러스터링
2023. 2. 9. 12:56
Algorithm
문제 이해 : 5분 문제 풀이 : 45분 틀린 풀이 def solution(str1, str2): str1 = chk_ascii(str1) str2 = chk_ascii(str2) str_1,str_2 = [],[] for i in range(len(str1)-1): str_1.append(str1[i:i+2]) for i in range(len(str2)-1): str_2.append(str2[i:i+2]) str_1_temp = str_1.copy() str_2_temp = str_2.copy() str_1_result = str_1.copy() #교집합 inter = set(str_1) & set(str_2) print(inter) #합집합 for i in str_2_temp: if i not in..
[프로그래머스] Lv.2 튜플
2023. 2. 9. 12:42
Algorithm
문제 이해 시간 : 19분;; (이렇게 오래 걸린적은 처음이었다;;) 풀이 시간 : 45분; 결과 : 못품 틀린 풀이(중도 포기) def solution(s): stack = [] for i in range(len(s)): if s[i] == '{': tmp = [] tmp_s = '' elif s[i].isdigit(): tmp_s += s[i] elif s[i] == '}': stack.append(tmp) elif s[i] == ','and s[i-1] != '}': tmp.append(int(tmp_s)) stack.pop() stack.sort(key=len) answer = [] print(stack) for i in range(len(stack)): answer.append(stack[i][..
[백준 #1309 파이썬] 동물원
2023. 1. 27. 17:50
Algorithm
DP의 기본을 알게 해주는 문제이자 생각하는 방법에 전환을 가져다 주는 문제 솔직히 구현보다는 생각하는 방법에 초점이 맞춰져 있다. 누구나 이런 문제는 노가다로 생각을 시작한다. 0일 때 1, 1일 때 3, 2일 때 7, 3일때 17, 4일때는 예시에서 41이라고 했은니 이렇게 되어있는 걸 볼 수 있다. 생각한 내용들 1 . 쪼개서 규칙성 찾아보기(지양) n = 1 아무것도 놓지 않는 경우 1 + 한개씩 놓는 경우 : 2 n = 2 아무것도 놓지 않는 경우 1 + 한개씩 놓는 경우 : 2*n + 두개씩 놓는 경우 : 2 n = 3 아무것도 놓지 않는 경우 1 + 한개씩 놓는 경우 2*n + 두개씩 놓는 경우 : 그림으로 노가다 + 세개씩 놓는 경우 : 2 이렇게 생각해보며 고정적으로 연산이 되는 부분을 ..

동적 계획법(Dynamic Programming) 에 대한 이해
2023. 1. 13. 15:49
Algorithm
Dynamic Programming, 하나의 복잡한 문제를 여러 개의 문제로 나누어 해결하는 방법 실행 시간을 줄이기 위해 같은 연산은 반복하지 않고 작은 결과를 바탕으로 규칙을 찾아 점차 큰 결과를 찾는 방법이다. 특징 동적 계획법은 재귀와 유사하다는 생각을 많이 하게 된다. 하지만 재귀 방식은 작은 연산을 반복한다. 그래서 같은 정답 결과를 여러번 연산으로 반복해서 다시 도출하기 때문에 비효율적이다. 그리고 큰 문제를 해결하기 위해서 작게 쪼개서 문제를 해결하는 분할 정복과 비슷하다. 하지만 이 또한 반복을 처리하는 과정에서 중복 여부를 처리하는 과정에서 차이가 있다. 이 차이점을 알아야 dp유형의 문제를 풀 때 보다 확고한 생각을 가지고 문제를 해결하려고 할 수 있다. dp 와의 차이를 꼭 인지해 ..