목록분류 전체보기 (77)
땃쥐네
문제 플랫폼 : 백준 번호 : 01074 제목 : Z 난이도 : Silver 1 N이 주어졌을 때, r행 c열을 몇 번째로 방문하는지 출력 문제 : 링크 필요 지식 분할 정복 풀이 삽질 n = 0 r = 0 c = 0 find = False count = -1 def main(): global n, r, c n, r, c = map(int, input().split()) divide_and_conquer(0, 0, 2 ** n) print(count) def divide_and_conquer(start_r, start_c, length): global count, find if find: return if length == 1: count += 1 if start_r == r and start_c == ..
문제 플랫폼 : 백준 번호 : 02839 제목 : 설탕 배달 난이도 : Silver 4 상근이가 배달하는 봉지의 최소 개수를 출력 문제 : 링크 필요 지식 그리디 알고리즘 : 가능한 많은 5kg 봉지로 포장하고, 나머지는 3kg로 포장하도록 하는 것이 이득이다. 풀이 n = int(input()) a, b = divmod(n, 5) answer = -1 if b == 0: answer = a elif b == 1 and a >= 1: answer = a + 1 elif b == 2 and a >= 2: answer = a + 2 elif b == 3: answer = a + 1 elif b == 4 and a >= 1: answer = a + 2 print(answer) 가능한 많은 5kg 봉지로 포장하..
문제 플랫폼 : 백준 번호 : 02230 제목 : 수 고르기 난이도 : Gold 5 차이가 M이상인 두 수들의 차 중 가장 작은 차이를 출력 문제 : 링크 필요 지식 이분탐색 투 포인터 풀이 입출력 import sys src = sys.stdin.buffer def main(): _, m = map(int, src.readline().split()) nums = sorted(set(int(x) for x in src.read().splitlines())) print(solution(nums, m)) main() 첫 줄 읽기는 sys.stdin.buffer.readline() 나머지 줄 읽기는 sys.stdin.buffer.read().splitlines()를 사용하였다. 이렇게 구한 값들을 int로 변환..
문제 플랫폼 : 백준 번호 : 01865 제목 : 웜홀 난이도 : Gold 3 만약에 시간이 줄어들면서 출발 위치로 돌아오는 것이 가능하면 YES, 불가능하면 NO를 출력 문제 : 링크 필요 지식, 해석 벨먼-포드 알고리즘 출발 정점에서 어떤 정점에 도착하기까지 기껏 많아봐야 N-1번의 간선을 순회하게 된다. 따라서 n-1번 모든 간선을 탐색하면서 이동비용을 최적화시키면 비용이 완전히 최적화된다. 그런데, 음의 사이클이 발생한다면 여기서 한 번 더 간선을 탐색했을 때 비용이 더 줄어드는 지점이 발생한다. 음의 가중치를 간선이 포함됐을 때 음의 사이클 발생여부 감지는 이 방식을 통해 수행하면 된다. 벨먼 포드 알고리즘의 시간복잡도는 O(NE)이다. 문제의 특수성 이 문제는 시작점이 주어지지 않았다. 각 지..
문제 플랫폼 : 백준 번호 : 10815 제목 : 숫자 카드 난이도 : Silver 5 첫째 줄에 입력으로 주어진 M개의 수에 대해서, 각 수가 적힌 숫자 카드를 상근이가 가지고 있으면 1을, 아니면 0을 공백으로 구분해 출력 문제 : 링크 필요 알고리즘 해시 이분탐색 풀이 풀이1 : 해시 import io, os, sys lines = io.BytesIO(os.read(0, os.fstat(0).st_size)).read().splitlines() print = sys.stdout.write a = set(n for n in lines[1].split()) print(' '.join('1' if x in a else '0' for x in lines[3].split())) set에 '상근이'가 가진 카..
문제 플랫폼 : 백준 번호 : 14503 제목 : 로봇 청소기 난이도 : Gold 5 로봇 청소기가 청소하는 칸의 개수를 출력 문제 : 링크 필요 지식 주기성과 나머지 : 무언가 주기적으로 반복되면, 배열의 요소를 순환하면서 반복하는 경우가 많은데 이 경우 순환 과정에서 인덱스를 벗어나게 되는 경우가 많다. 이런 상황에서는 나머지 연산을 사용하면 편리하다. 이 문제는 방향 배열을 사용하면 편리한 문제다. 방향 배열의 순서도 아무렇게 두기보다, 문제에서 주어진 조건에 맞게 시계 또는 반시계 방향으로 배치하면 편리하다. 문제에서는 북동남서 순으로 0,1,2,3을 제시해줬는데 이는 시계방향이다. 왼쪽 방향으로 순서대로 바라보므로 반시계 방향으로 순회할 때는 0, -1, -2, -3, ...(인덱스를 벗어나는데..
문제 플랫폼 : 백준 번호 : 02606 제목 : 바이러스 난이도 : Silver 3 컴퓨터의 수와 네트워크 상에서 서로 연결되어 있는 정보가 주어질 때, 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수를 출력하는 프로그램을 작성 문제 : 링크 필요 알고리즘 DFS BFS 풀이 풀이1 : DFS import sys print = sys.stdout.write input = sys.stdin.readline n = int(input()) graph = {i: [] for i in range(1, n + 1)} check = [False] * (n + 1) for _ in range(int(input())): s, e = map(int, input().split()) graph[s].append(..
문제 플랫폼 : 프로그래머스 번호 : 131128 제목 : 숫자 짝꿍 난이도 : Level 1 두 정수 X, Y가 주어졌을 때 공통으로 나타나는 정수 k(0 ≤ k ≤ 9)들(중복 허용)을 이용하여 만들 수 있는 가장 큰 정수 반환 문제 : 링크 필요 지식 파이썬의 경우 카운터를 잘 사용하면 정말 쉽게 풀 수 있는 문제다. 문자열 처리 Python : Counter 풀이 from collections import Counter def solution(x, y): c = Counter(str(x)) & Counter(str(y)) return '-1' if not c else '0' if len(c) == 1 and '0' in c else ''.join(sorted(c.elements(), reverse..