목록Python (42)
눈송이의 개발생활
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/douiy3/btrqMbchCOh/IKXKFWlzqN3S9bY1mmtpyk/img.png)
Deque == Double-Ended Queue 큐의 앞과 뒤에서 모두 삽입/삭제가 가능하다 덱을 이용해서 양방향 큐/원형 큐를 구현할 수 있다 파이썬에서는 collections 모듈 내에 있는 deque를 사용할 수 있다 📌 다양한 함수 append(x) : 맨 끝에 x를 삽입 appendleft(x) : 맨 앞에 x를 삽입 pop() : 맨 뒤에 있는 원소 삭제 popleft() : 맨 앞에 있는 원소 삭제 clear() : 덱 전체를 비움 (len == 0) copy() : 뎃 전체를 복사 count(x) : 덱의 원소 중 x의 개수를 셈 extend(iterable) : iterable 원소들 모두 덱의 맨 끝에 덧붙임 insert(x, i) : index i에 x를 삽입 index(x[, st..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b7qcPK/btrqNyqgexW/TeuWvPTydEu6aeeszm2zV0/img.png)
자주 쓰이는 순열, 중복순열, 조합, 중복조합 구현하기 itertools 공식문서에 따르면 itertools는 효율적인 루핑을 위한 iterator를 만드는 함수라고 한다 해당 모듈에는 다양한 함수들이 있다 그 중 자주 나오는 순열 조합 함수들에 대해 정리해 볼 것이다 📌 permutations from itertools import permutations arr = [1, 2, 3, 4] print(permutations(arr, 2)) print(list(permutations(arr, 2))) # # [(1, 2), (1, 3), (1, 4), (2, 1), (2, 3), (2, 4), (3, 1), (3, 2), (3, 4), (4, 1), (4, 2), (4, 3)] permutations(li..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bofs2v/btrqJ6B9xOj/OfiKPkLH5Z54n6NxOl4PV1/img.png)
문제 https://www.acmicpc.net/problem/1406 코드 #1 - WRONG ❌ from collections import deque import sys input = lambda : sys.stdin.readline().strip() str = deque(input()) n = int(input()) cursor = len(str) for _ in range(n): op = input().split() if op[0] == 'L' and cursor != 0: cursor -= 1 elif op[0] == 'D' and cursor != len(str): cursor += 1 elif op[0] == 'B' and cursor != 0: del str[cursor - 1] curso..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/uheCA/btrqHEDwXkS/c4NEr9jkUOVdapeTyxC59K/img.png)
문제 https://www.acmicpc.net/problem/1748 코드 import sys input = lambda : sys.stdin.readline().strip() n = input() answer = 0 length = len(n) - 1 for i in range(length): # i는 0부터 시작 ~ 자릿수보다 하나 작은거까지 answer += (i+1) * 9 * (10 ** i) answer += (length + 1) * ((int(n) - (10 ** length)) + 1) print(answer) 풀이 그리디 유형 문제 중 처음으로 아무런 힌트 없이 쉽게 풀 수 있는 문제였다 예시를 보면 쉽게 패턴을 찾을 수 있다 15 → 123456789 + 101112131415 15..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bvnMa9/btrqAoI5chn/bYJIm2WseWoj8iK03xS26k/img.png)
List를 String으로 바꾸는 방법 📌 join 함수 리스트에 있는 모든 요소를 합쳐서 하나의 문자열로 바꿔주는 함수 '구분자'.join(list) list = ['a', 'b', 'c', 'd'] print(''.join(list)) # abcd print(' '.join(list)) # a b c d print(','.join(list)) # a,b,c,d 리스트 안의 모든 요소가 string형이 아니면 error가 발생하기 때문에 형변환을 해준 뒤에 join 함수를 사용하면 예외처리 할 수 있다. list = ['a', 'b', 1, 2] print(' '.join(str(e) for e in list)) # a b 1 2 📌 for문 사용 list = ['a', 'b', 'c', 'd'] st..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cpMS3w/btrqunPYgAK/qqKosBzz4eA5xa47UngWvk/img.png)
문제 https://www.acmicpc.net/problem/1476 코드 E, S, M = map(int, input().split()) answer = 1 while True: # 배수가 되는 수에서 빼고 그 다음 나머지 계산 if (answer - E)%15 == 0 and (answer - S)%28 == 0 and (answer - M)%19 == 0: print(answer) break answer+=1 풀이 풀이를 생각해내는게 생각보다 오래 걸렸다. 실버5 문제인데도 꽤 어려워서(나한테는...) 내가 생각한 풀이를 완전 바꿔야 했었다. 처음에는 for문을 계속 돌면서 3 수(15, 28, 19)의 공배수를 찾는 방법으로 생각했는데 코드를 짤 수 없어서 반대로 접근해보았다. 숫자를 계속 키워..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bKHk1G/btrqmqgqEQh/vsJjmmtmLc0HFH4bznagQk/img.png)
문제 https://www.acmicpc.net/problem/3085 코드 import sys input = sys.stdin.readline # 행/열에서 사탕 최대 개수 구하는 함수 def check(candies): n = len(candies) answer = 1 for i in range(n): count = 1 # 열 순회하면서 연속되는 숫자 세기 for j in range(1, n): if candies[i][j] == candies[i][j-1]: count += 1 else: count =1 if count>answer: answer = count count = 1 # 행 순회하면서 연속되는 숫자 세기 for j in range(1, n): if candies[j][i] == candi..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dnwe1i/btrqmMXsDrH/rayNTbg1QZwUMNrz5Ef4e1/img.png)
문제 https://www.acmicpc.net/problem/6588 코드 import sys r = 1000000 sieve = [True for _ in range(r)] for i in range(2, int(r**0.6)): if sieve[i]: for j in range(i + i, r, i): sieve[j] = False while True: n = int(sys.stdin.readline()) if n == 0: break for k in range(3, r): if sieve[k]: if sieve[n-k]: print("%d = %d + %d"%(n , k , n-k)) break 풀이 계속 작은 조건들때문에 많이 틀린 문제이다. 문제였던 부분은.. 100000까지의 소수를 찾는 과..