[백준 15721번] 번데기 15721번: 번데기 예를 들어 7명이 있고, 16번째 등장하는 “뻔”을 부른 사람의 번호를 알고 싶다면 입력은 7 16 0이다. 4명이 있고 6번째 등장하는 “데기”를 부른 사람의 번호를 알고 싶다면 입력은 4 6 1이며, 이 www.acmicpc.net # 뻔 - 데기 - 뻔 - 데기 - 뻔 - 뻔 - 데기 - 데기 # 뻔 - 데기 - 뻔 - 데기 (고정) + (뻔 x n) - (데기 x n) a = int(input()) # a Algorithm/Implementation 2023.12.28
[백준 5052번] 전화번호 목록 5052번: 전화번호 목록 첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가 www.acmicpc.net import sys input = sys.stdin.readline t = int(input().rstrip()) for _ in range(t): n = int(input().rstrip()) cases = [] flag = True for _ in range(n): cases.append(input().rstrip()) cases.sort() # for i in range(len(cases)): # if flag: # break # f.. Algorithm/String 2023.12.13
[Algorithm] 재귀함수란 ? 재귀함수란 ? 함수 내부에서 ‘자기 자신을 호출’하는 함수를 의미합니다. 이를 통해서 함수가 자신을 반복적으로 호출하면서 원하는 결과를 도출할 수 있습니다. 단, 재귀함수를 사용하는 경우 함수 호출이 계속해서 쌓이게 되면 호출 스택이 많아져서 메모리 공간을 많이 차지하고, 성능이 저하될 수 있다는 단점이 있습니다. 따라서 재귀함수를 작성할 때는 무한 루프에 빠지지 않도록 종료 조건을 명확하게 설정해주어야 합니다. 대표적인 예로 팩토리얼 계산, 피보나치 수열 계산 등이 있습니다. 참고 : https://adjh54.tistory.com/194 [Java/알고리즘] 재귀 함수(Recursion Function) 이해하기 해당 글에서는 재귀함수에 대해 이해하며 다양한 예시와 재귀함수를 이용한 알고리즘을 기반으.. Algorithm/Recursion 2023.11.27
[Algorithm] 시간복잡도 & 공간복잡도 자료구조란 ? 효율적으로 데이터를 저장하고 관리할 수 있는 데이터 집합 1. 복잡도 먼저 복잡도란 '알고리즘의 성능과 효율성을 나타내는 척도'입니다. 크게 시간 복잡도와 공간 복잡도로 나눌 수 있다. 알고리즘을 성능을 평가할 때 주로 수행 시간과 메모리 사용량을 기준으로 두는데, 이 중 수행 시간에 해당하는 것이 시간 복잡도이고 메모리 사용량에 해당하는 것이 공간 복잡도이다. 1-1. 시간 복잡도 시간 복잡도란 프로그램에서 특정 크기의 입력을 기준으로 할 때 수행되는 연산의 횟수를 나타낸다. 최선의 경우 (Best Case) 최적의 입력을 한 상태에서, 작업을 완료하는 데 필요한 연산 횟수 최악의 경우 (Worst Case) 최악의 입력을 한 상태에서, 작업을 완료하는 데 필요한 연산 횟수 평균의 경우 .. Algorithm 2023.11.26
[백준 1941번] 소문난 칠공주 1941번: 소문난 칠공주 총 25명의 여학생들로 이루어진 여학생반은 5×5의 정사각형 격자 형태로 자리가 배치되었고, 얼마 지나지 않아 이다솜과 임도연이라는 두 학생이 두각을 나타내며 다른 학생들을 휘어잡기 시작 www.acmicpc.net from itertools import combinations from collections import deque dx = [-1,1,0,0] dy = [0,0,-1,1] area = [list(input()) for _ in range(5)] positions = [] for i in range(5): for j in range(5): positions.append((i,j)) combs = list(combinations(positions,7)) answer .. Algorithm/Backtracking 2023.11.22
[SWEA - D4] 보급로 # 정답 코드(BFS + 최단경로) from collections import deque T = int(input()) for test_case in range(1, T + 1): n = int(input()) dx = [-1,1,0,0] dy = [0,0,-1,1] area = [list(map(int,(list(input())))) for _ in range(n)] visited = [[False]*n for _ in range(n)] time = [[0]*n for _ in range(n)] def bfs(): visited[0][0] = True queue = deque([(0,0)]) while queue: x, y = queue.popleft() for i in range(4): nx = x .. Algorithm/BFS 2023.11.19
[프로그래머스 PCCP 모의고사 2-4번] 수레 def solution(maze): answer = 0 n = len(maze) m = len(maze[0]) dx = [-1,1,0,0] dy = [0,0,-1,1] minimum = float("inf") is_success = False # 모든 수레가 각각의 도착 칸에 이동해야 함 # 각 턴 마다 모든 수레를 상하좌우로 인접한 칸 중에 하나로 이동 # 벽(5)이나 격자 판 밖으로 이동 X # 자신이 방문했던 칸으로 이동 X # 도착 칸에 위치한 수레는 더 이상 이동 X # 동시에 두 수레를 같은 칸에 위치 X # 수레끼리 자리를 바꿀 수 X for i in range(n): for j in range(m): if maze[i][j] == 1: red_start = (i,j) if maze[i][j.. Algorithm/DFS 2023.11.18
[프로그래머스 PCCP 모의고사 2-2번] 시추관 from collections import deque def solution(land): answer = 0 dx = [-1,1,0,0] dy = [0,0,-1,1] n = len(land) m = len(land[0]) visited = [[False]*m for _ in range(n)] total = [0]*m def bfs(x,y): if visited[x][y]: return visited[x][y] = True y_list = set() count = 0 queue = deque([(x,y)]) while queue: temp_x,temp_y = queue.popleft() count += 1 y_list.add(temp_y) for i in range(4): nx = temp_x + dx[i.. Algorithm/BFS 2023.11.18
[프로그래머스 PCCP 모의고사 2-1번] 붕대 감기 def solution(bandage, health, attacks): # 1초마다 x 만큼 체력회복 # t초 동안 연속으로 붕대를 감는데 성공하면 y만큼의 체력을 추가로 회복 # 최대 체력 보다 체력이 커지는건 X # 몬스터에게 공격을 당하거나 기술이 끝나면 '붕대 감기' 재시전 + 연속 성공시간 0초기화 # 체력이 0 이하가 되면 캐릭터 사망 후 회복 X # 만약에 공격받고 죽으면 -1 리턴 # 입력 : 붕대감기 기술정보(시전 시간, 1초당 회복량, 추가 회복량), 최대 체력, 몬스터의 공격 패턴 # 출력 : 모든 공격을 받고 난 후 남은 체력 max_time = attacks[-1][0] # 몬스터의 마지막 공격시간 attack_list = [0]*(max_time+1) # 공격 목록을 리스트화 f.. Algorithm/Implementation 2023.11.18
[프로그래머스 PCCP 모의고사 4번] 보물 지도 from collections import deque def solution(n, m, hole): dx = [-1,1,0,0] dy = [0,0,-1,1] area = [[0]*n for _ in range(m)] visited = [[[-1]*n for _ in range(m)] for _ in range(2)] for hx, hy in hole: area[hy-1][hx-1] = -1 area[0][0],area[m-1][n-1] = 1, 2 def bfs(): visited[0][0][0] = 0 queue = deque([(0,0,0)]) while queue: w, x, y = queue.popleft() for i in range(4): nx = x + dx[i] ny = y + dy[i] .. Algorithm/BFS 2023.11.11