Algorithm 243

[백준 15721번] 번데기

15721번: 번데기 예를 들어 7명이 있고, 16번째 등장하는 “뻔”을 부른 사람의 번호를 알고 싶다면 입력은 7 16 0이다. 4명이 있고 6번째 등장하는 “데기”를 부른 사람의 번호를 알고 싶다면 입력은 4 6 1이며, 이 www.acmicpc.net # 뻔 - 데기 - 뻔 - 데기 - 뻔 - 뻔 - 데기 - 데기 # 뻔 - 데기 - 뻔 - 데기 (고정) + (뻔 x n) - (데기 x n) a = int(input()) # a

[백준 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 ..

[프로그래머스 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-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..