본문 바로가기

전체 글

(116)
파이썬 | 백준 | 7562 | 나이트의 이동 | BFS solution 1. dx = [-2, -2, -1, -1, 1, 1, 2, 2], dy = [1, -1, 2, -2, 2, -2, 1, -1] 2. deque 이용 # 7562, 나이트의 이동 import sys from collections import deque dx = [-2, -2, -1, -1, 1, 1, 2, 2] dy = [1, -1, 2, -2, 2, -2, 1, -1] def bfs(x, y): q.append((x, y)) visited[x][y] = 1 while q: x3, y3 = q.popleft() if x3 == x2 and y3 == y2: return visited[x3][y3]-1 for i in range(8): nx = x3 + dx[i] ny = y3 + dy[i..
파이썬 | 백준 | 2309 | 일곱 난쟁이 | 조합(combinations) solution 1. 조합을 이용해 9개 중 7개를 뽑아 합이 100이면 출력한다. # 2309, 일곱 난쟁이 import sys from itertools import combinations dwarf = [int(sys.stdin.readline()) for _ in range(9)] # 조합을 이용해 9명 중 7명 뽑음 seven = list(combinations(dwarf, 7)) for i in seven: if sum(i) == 100: ans = list(i) break # 오름차순 출력 ans = sorted(ans) for ans_ in ans: print(ans_) 29380KB 60ms 문제 출처 https://www.acmicpc.net/problem/2309 2309번: 일곱 난..
파이썬 | 백준 | 2865 | 나는 위대한 슈퍼스타K | 소수 출력 solution 1. dictionary 이용 { 참가자 번호 : 점수 } 2. 소수 첫째 자리까지 출력 print('%.1f' % sum) # 2865, 나는 위대한 슈퍼스타K import sys # N: 예선 참가자 수, M: 장르, K: 본선 진출자 수 N, M, K = map(int, sys.stdin.readline().split()) candidate_score = {} for i in range(N): candidate_score[i+1] = 0 for i in range(M): genre = list(map(float, sys.stdin.readline().split())) for j in range(0, 2*N, 2): if genre[j+1] > candidate_score[genre[..
파이썬 | 백준 | 6603 | 로또 | 조합(combinations) solution 1. K개 중 6개 → 조합 from itertools import combinations # 6603, 로또 import sys from itertools import combinations lot = [] while True: lot = list(map(int, sys.stdin.readline().split())) if lot[0] == 0 and len(lot) == 1:# 0이면 실행 종료 break lot_com = list(combinations(lot[1:], 6))# 6개 뽑음 for lot_com_ in lot_com: print(*lot_com_) print() 29380KB 64ms 문제 출처 https://www.acmicpc.net/problem/6603 6603..
백준 | 파이썬 | 1012 | 유기농 배추 | sys.setrecursionlimit(50000) solution 1. dfs 이용 2. x를 열로, y를 행으로 생각해야 하므로 land[y][x] 3. land = [[0]*M]*N 하면 값이 같이 변함. land = [[0]*M for _ in range(N)] import sys dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] # 0 : 배추 X, 1 : 배추 O def dfs(x, y, arr): arr[y][x] = 2 # 2 : 방문 체크 for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0
파이썬 | 백준 | 1639 | 행운의 티켓 | list(map(int, list(sys.stdin.readline().strip()))) https://www.acmicpc.net/problem/1639 1639번: 행운의 티켓 첫째 줄에 문자열 S가 주어진다. 문자열 S는 1보다 크거나 같고, 9보다 작거나 같은 수만 입력으로 들어오며, 문자열의 길이는 100보다 작거나 같은 자연수이다. www.acmicpc.net solution 입력받은 문자열의 크기에서 2씩 줄이며 조건을 만족하는지 확인 # 1639, 행운의 티켓 import sys # 왼쪽 N자리 합과 오른쪽 N자리 합이 같은지 확인 def isLucky(x): mid = len(x) // 2 sum1 = sum2 = 0 for i in range(mid): sum1 += int(x[i]) sum2 += int(x[len(x)-1-i]) if sum1 == sum2: return..
백준 | 파이썬 | 1431 | 시리얼 번호 https://www.acmicpc.net/problem/1431 solution # 1431, 시리얼 번호 import sys # 길이가 같은 배열 자리수의 합으로 정렬 def serial_sort1(arr): sorted_arr = {} return_arr = [] for number in arr: sum = 0 for ch in number: if ch.isdigit(): sum += int(ch) if sorted_arr.get(sum) is None: sorted_arr[sum] = [number] else: sorted_arr[sum].append(number) sorted_arr = sorted(sorted_arr.items(), key=lambda x: x[0]) for i in sorte..
파이썬 | 백준 | 1728 | 구슬 굴리기 | list에 있는지 : in 없는지 : not in https://www.acmicpc.net/problem/1728 solution 1. N 개의 구슬 --> N크기의 일차원 배열 생성 import sys n = int(sys.stdin.readline()) coor = [] for i in range(n+1): coor.append(list(map(int, sys.stdin.readline().split()))) loc_v = {}# 처음 위치, 속도 저장 (y좌표는 겹치지 않으므로 딕셔너리 이용) for y in range(n): v_candidate = []# 속도가 될 수 있는 후보들을 1차원 배열에 저장 for i in range(n): v_tmp = (coor[-1][i]-coor[0][y]) / n# (마지막 위치 - 처음 위치) / n v..