본문 바로가기

분류 전체보기

(147)
Baekjoon 12100. 2048 (Easy) / Python 이동 함수 구현: 보드를 상, 하, 좌, 우로 이동시키는 함수들을 작성합니다.DFS 탐색: 최대 5번 이동을 시도하며 각 이동에서의 보드 상태를 재귀적으로 탐색합니다.깊은 복사: 각 이동을 시도할 때 원래 보드의 상태를 보존하기 위해 깊은 복사를 사용합니다.최대값 추적: 이동 시도 후 현재 보드 상태에서 가장 큰 블록 값을 추적합니다.import sysimport copyN = int(input())pan = [list(map(int, sys.stdin.readline().split())) for _ in range(N)]ans = 0# 왼쪽으로 이동def left(board): for i in range(N): cursor = 0 for j in range(1, N): ..
Baekjoon 1918. 후위 표기식 / Python 알고리즘 설명피연산자는 출력 문자열에 바로 추가합니다.연산자는 스택에 저장하지만, 우선순위를 고려하여 스택에서 적절한 시점에 연산자를 꺼내어 출력 문자열에 추가합니다.괄호는 특별하게 처리합니다:여는 괄호 (는 스택에 무조건 추가합니다.닫는 괄호 )는 여는 괄호 (가 나올 때까지 스택의 연산자를 모두 출력 문자열에 추가합니다.우선순위괄호 (, )는 특별한 처리곱셈 *와 나눗셈 /는 높은 우선순위덧셈 +와 뺄셈 -는 낮은 우선순위inlst = input()# 결과를 저장할 리스트ans = ''# 연산자를 저장할 스택lst = []# 주어진 수식을 순회하면서 후위 표기식으로 변환for i in inlst: if i == '(': # 여는 괄호는 무조건 스택에 넣기 lst.appe..
Baekjoon 1700. 멀티탭 스케줄링 / Python https://www.acmicpc.net/problem/1700 입력 처리:n은 멀티탭 구멍의 개수, k는 전기용품의 총 사용 횟수입니다.arr는 전기용품의 사용 순서 리스트입니다.멀티탭 관리:now 리스트는 현재 멀티탭에 꽂혀 있는 전기용품을 저장합니다.전기용품을 순서대로 처리하면서, 이미 멀티탭에 꽂혀 있으면 넘어갑니다.빈 구멍이 있으면 현재 전기용품을 멀티탭에 꽂습니다.빈 구멍이 없으면 멀티탭에 꽂힌 전기용품 중 앞으로 가장 늦게 사용되거나 더 이상 사용되지 않는 전기용품을 찾아서 그 자리에 현재 전기용품을 꽂습니다.결과 출력:최소 플러그를 뽑는 횟수를 출력합니다.n, k = map(int, input().split())arr = list(map(int, input().split()))# 결과값을..
Baekjoon 13460. 구슬 탈출 2 / Python https://www.acmicpc.net/problem/13460알고리즘 설명입력 처리:n, m을 입력받고 보드 상태를 arr 리스트에 저장합니다.보드를 탐색하면서 빨간 구슬, 파란 구슬, 구멍의 위치를 저장합니다.구슬 이동 함수:move(x, y, dx, dy) 함수는 주어진 방향 dx, dy로 구슬을 이동시켜 최종 위치와 이동한 거리를 반환합니다.BFS 탐색:초기 상태(빨간 구슬, 파란 구슬 위치, 움직임 횟수)를 큐에 추가합니다.큐에서 상태를 꺼내 네 방향으로 구슬을 이동시키고, 각 방향으로 이동한 후의 상태를 큐에 추가합니다.이동한 후, 파란 구슬이 구멍에 빠지지 않았고 빨간 구슬이 구멍에 빠졌다면 성공을 의미합니다.만약 빨간 구슬과 파란 구슬이 같은 위치에 있다면, 더 많이 이동한 구슬을 한 ..
Baekjoon 2536. 버스 갈아타기 / Python https://www.acmicpc.net/problem/2536알고리즘 설명입력 처리:m, n: 격자의 크기(수직선의 수, 수평선의 수)를 입력받음.k: 버스의 수를 입력받음.각 버스의 운행 구간을 입력받아 bus_line 리스트에 저장함.출발지와 목적지 좌표를 입력받아 bus_line에 추가함.교차 여부 확인:cross(a, b) 함수는 두 버스 구간이 교차하는지 확인하여 교차하면 True, 그렇지 않으면 False를 반환함.BFS 탐색:visited 리스트는 각 버스의 방문 여부를 기록함.q는 BFS를 위한 큐로, 초기값으로 출발지(-2)와 버스 수(0)를 넣음.큐가 빌 때까지 반복하면서, 현재 버스가 이미 방문한 경우 건너뜀.현재 버스를 방문 처리하고, 목적지에 도착한 경우 사용한 버스 수를 출력..
Baekjoon 9742. 순열 / Java https://www.acmicpc.net/problem/9742알고리즘 설명입력 처리:입력으로 주어지는 문자열과 위치를 읽습니다.각 테스트 케이스는 한 줄로 이루어져 있으며, 문자열과 위치는 공백으로 구분됩니다.순열 생성:재귀적으로 순열을 생성합니다. 문자열의 각 문자를 하나씩 사용하여 순열을 만듭니다.이미 사용된 문자는 visit 배열을 통해 추적합니다.순열 카운팅:cnt가 문자열의 길이와 같으면, 현재까지 만든 문자는 완전한 순열이 됩니다.순열의 카운트를 증가시키고, 현재 카운트가 찾고자 하는 위치와 같으면 해당 순열을 결과로 저장합니다.출력:모든 테스트 케이스를 처리한 후, 결과를 출력합니다.해당 위치의 순열이 없는 경우 "No permutation"을 출력합니다.package letsgo;imp..
Baekjoon 1799. 비숍 / Python https://www.acmicpc.net/problem/1799문제 해결 알고리즘이 문제를 해결하기 위한 기본적인 접근 방법은 백트래킹을 사용하는 것입니다. 비숍은 대각선 방향으로만 이동할 수 있기 때문에, 대각선의 사용 여부를 관리하며 비숍을 배치해 나가야 합니다.대각선의 구분:비숍이 공격할 수 있는 영역은 대각선입니다.체스판의 각 칸에 대해 두 개의 대각선 정보를 유지해야 합니다.주 대각선: 같은 기울기의 대각선 (슬로프가 1인 대각선)부 대각선: 기울기가 -1인 대각선 (슬로프가 -1인 대각선)백트래킹을 통한 비숍 배치:대각선의 상태를 관리하기 위해 find 딕셔너리를 사용합니다. 이 딕셔너리는 주 대각선과 부 대각선의 사용 여부를 나타냅니다.가능한 모든 대각선 인덱스는 -n+1에서 n-1까지 입..
Baekjoon 16566. 카드 게임 / Python 알고리즘 설명입력 처리:N, M, K는 각각 카드의 총 개수, 빨간색 카드의 수, 카드 게임의 횟수를 나타냅니다.pushed_h20는 철수가 선택한 M개의 빨간색 카드의 번호를 오름차순으로 정렬한 리스트입니다.fe_h20는 철수가 게임에서 낼 카드의 번호를 나타내는 리스트입니다.Union-Find 자료구조 초기화:arr 리스트는 각 카드의 부모 노드를 저장합니다. 초기 상태에서 모든 카드의 부모는 자기 자신입니다.Find 함수:주어진 카드의 최종 부모를 찾는 함수입니다. 경로 압축을 통해 효율성을 높입니다.Sol 함수:카드의 부모를 통합하는 함수입니다. 이 함수는 find 함수에서 얻은 부모 노드를 통해 카드의 그룹을 연결합니다.이진 탐색:bisect_right를 사용하여 fe_h20의 각 카드에 대해,..
Baekjoon 18122. 색깔 하노이 탑 / Python print((2**(int(input())+2)-5)%(10**9+7))https://www.acmicpc.net/problem/18122사실상 수학 문제이다.하노이 탑 기본 원리하노이 탑은 N개의 원판을 시작 기둥에서 목표 기둥으로 이동하는 문제입니다. 한 번에 하나의 원판만 이동할 수 있으며, 큰 원판이 작은 원판 위에 놓일 수 없습니다. 기본 하노이 탑 문제에서 N개의 원판을 이동하는 데 필요한 최소 이동 횟수는 다음과 같습니다:T(N) = 2^N - 1이 공식은 재귀적으로 문제를 해결하는 방식에서 유도된 것입니다.두 개의 색깔이 있는 하노이 탑문제에서는 원판이 두 색 (빨간색과 검은색) 이고, 각 크기별로 빨간색 원판과 검은색 원판이 번갈아 놓여 있습니다.하노이 탑 게임의 목표는 모든 원판을 두 ..
Baekjoon 13977. 이항 계수와 쿼리 / Python 설명이 코드는 이항 계수 (nr)\binom{n}{r}(rn​)를 효율적으로 계산하기 위한 방법을 사용하고 있습니다.팩토리얼 계산은 사전에 미리 처리하여 빠르게 조회할 수 있도록 합니다.역수는 페르마의 소정리(Fermat's Little Theorem)를 이용하여 ap−2mod  pa^{p-2} \mod pap−2modp로 계산합니다.시간 복잡도:팩토리얼 계산: O(n)O(n)O(n)거듭제곱 계산: O(log⁡n)O(\log n)O(logn) (재귀 호출 방식)이 코드의 주요 시간 복잡도는 입력 크기에 비례하여 매우 효율적입니다.import sys# 1부터 4000000까지의 팩토리얼 값을 계산하여 저장하는 리스트factorial = [1] * 4000001for i in range(2, 4000001)..