Algorithm 200

[백준/BOJ] 12813 - 이진수 연산

12813 - 이진수 연산 📌 문제 총 100,000 비트로 이루어진 이진수 A와 B가 주어진다. 이때, A & B, A | B, A ^ B, ~A, ~B를 한 값을 출력하는 프로그램을 작성하시오. 📋 코드 A = int(input(), 2) B = int(input(), 2) mask = 2**100000 - 1 print(bin(A & B)[2:].zfill(100000)) print(bin(A | B)[2:].zfill(100000)) print(bin(A ^ B)[2:].zfill(100000)) print(bin(A ^ mask)[2:].zfill(100000)) print(bin(B ^ mask)[2:].zfill(100000)) 💡 한마디 int(input(), 2) 는 입력받은 2진수를 i..

[백준/BOJ] 11657 - 타임머신

11657 - 타임머신 📌 문제 N개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 버스가 M개 있다. 각 버스는 A, B, C로 나타낼 수 있는데, A는 시작도시, B는 도착도시, C는 버스를 타고 이동하는데 걸리는 시간이다. 시간 C가 양수가 아닌 경우가 있다. C = 0인 경우는 순간 이동을 하는 경우, C < 0인 경우는 타임머신으로 시간을 되돌아가는 경우이다. 1번 도시에서 출발해서 나머지 도시로 가는 가장 빠른 시간을 구하는 프로그램을 작성하시오. 📋 코드 INF = int(1e9) def ford(start): global cycle distance[start] = 0 for i in range(N): for j in range(1, N+1): for now, cost i..

[백준/BOJ] 1058 - 친구

1058 - 친구 📌 문제 지민이는 세계에서 가장 유명한 사람이 누구인지 궁금해졌다. 가장 유명한 사람을 구하는 방법은 각 사람의 2-친구를 구하면 된다. 어떤 사람 A가 또다른 사람 B의 2-친구가 되기 위해선, 두 사람이 친구이거나, A와 친구이고, B와 친구인 C가 존재해야 된다. 여기서 가장 유명한 사람은 2-친구의 수가 가장 많은 사람이다. 가장 유명한 사람의 2-친구의 수를 출력하는 프로그램을 작성하시오. A와 B가 친구면, B와 A도 친구이고, A와 A는 친구가 아니다. 📋 코드 N = int(input()) graph = [list(input()) for _ in range(N)] visited = [[0 for _ in range(N)] for _ in range(N)] for k in ..

[백준/BOJ] 18352 - 특정 거리의 도시 찾기

18352 - 특정 거리의 도시 찾기 📌 문제 어떤 나라에는 1번부터 N번까지의 도시와 M개의 단방향 도로가 존재한다. 모든 도로의 거리는 1이다. 이 때 특정한 도시 X로부터 출발하여 도달할 수 있는 모든 도시 중에서, 최단 거리가 정확히 K인 모든 도시들의 번호를 출력하는 프로그램을 작성하시오. 또한 출발 도시 X에서 출발 도시 X로 가는 최단 거리는 항상 0이라고 가정한다. 예를 들어 N=4, K=2, X=1일 때 다음과 같이 그래프가 구성되어 있다고 가정하자. 이 때 1번 도시에서 출발하여 도달할 수 있는 도시 중에서, 최단 거리가 2인 도시는 4번 도시 뿐이다. 2번과 3번 도시의 경우, 최단 거리가 1이기 때문에 출력하지 않는다. 📋 코드 import heapq def dijkstra(star..

[백준/BOJ] 16953 - A → B

16953 - A -> B 📌 문제 정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다. 2를 곱한다. 1을 수의 가장 오른쪽에 추가한다. A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자. 📋 코드 from collections import defaultdict from collections import deque def bfs(start, visited): q = deque() q.append(start) visited[start] = 1 while q: x = q.popleft() if x == B: return visited[x] for i in (x * 2, int(str(x) + '1')): if 0

[백준/BOJ] 17940 - 지하철

17940 - 지하철 📌 문제 대학원생인 형욱이는 연구실에 출근할 때 주로 지하철을 이용한다. 지하철은 A와 B, 두 개의 회사에서 운영하고 있다. 두 회사는 경쟁사 관계로 사람들이 상대 회사의 지하철을 이용하는 것을 매우 싫어한다. 그래서 A와 B는 모두 상대 회사의 지하철로 환승할 때 마다 비싼 요금을 받고 있다. 형욱이는 가난한 대학원생이기 때문에 돈을 아끼는 것이 가장 중요하다. 형욱이에게 최적의 출근경로를 찾아주자. 최적의 출근 경로란 환승 횟수를 최소로 하는 경로 중 소요시간이 가장 짧은 경로이다. 여기에서의 환승은 이동하면서 지하철역을 운영하는 회사가 바뀔 때 마다 환승 1회로 계산한다. 위의 그림에서 원은 지하철역을 의미하고 선들은 지하철역들이 연결되어 있는 지를 나타낸다. 흰색으로 표시된..