알고리즘 338

[백준, 14502번] 연구소

# 재귀와 탐색을 통해 푼 풀이 # 계속 이런 문제 유형을 풀어봐야 익숙해 질 것 같다. import sys from collections import deque from copy import deepcopy input = sys.stdin.readline n,m = map(int,input().split()) arr = [ list(map(int,input().split())) for i in range(n)] virus_q = deque([]) result = 0 for i in range(n): for j in range(m): if arr[i][j] == 2: # 바이러스 위치 찾기 virus_q.append([i,j]) def search(): global result check_arr = de..

알고리즘 2023.07.28

[백준, 14501번] 퇴사

# Bottom Up 방식의 dp 풀이 # 하나씩 접근하면서 모든 과정을 거쳐야하기에 dp를 사용했다는 점! import sys input = sys.stdin.readline n = int(input()) li = [list(map(int,input().split())) for _ in range(n)] dp = [0]*(n+1) for i in range(n): for j in range(i+li[i][0], n+1): if dp[j] < dp[i]+li[i][1]: dp[j] = dp[i]+li[i][1] print(dp[-1]) # Top Down import sys input = sys.stdin.readline n = int(input()) li = [list(map(int,input().sp..

알고리즘 2023.07.27

[백준] 셀프 넘버

# 1부터 10000까지 배열을 만들어 두고 # for 문을 이용해 1부터 10000까지 돌면서 # hap이 있으면 result에서 지우는 방식으로 푼 방식 # 여기서 잠시 혼동이 왔던 부분 정리하자면 # del은 인덱스를 지우는 방식 # remove는 값을 지우는 방식 result = [i for i in range(1, 10001)] for i in range(1, 10001): hap = i + sum(list(map(int,str(i)))) if hap in result: result.remove(hap) for i in result: print(i) # 처음 접근한 방식 # 1부터 10000까지 돌면서 1부터 해당 숫자 아래의 모든 값을 조사하며 # 해당 숫자의 값이 되는지 확인 하는 코드 # ..

알고리즘 2023.07.26

[백준] 알고리즘 수업 - 알고리즘의 수행 시간 6

# 3개의 반복문이 서로의 값에 대응하며 변하고 있으며 # 예를 들어 n의 값이 7의 경우 # i는 0 ~ 4, j는 1 ~ 5, k = 2 ~ 6까지 실행이 되며 # i가 0, j가 1일때 k는 2,3,4,5,6 로 총 5번 실행이 되는 패턴을 파악하면 # i에 따라 출력되는 횟수는 # 5,4,3,2,1 # 4,3,2,1 # 3,2,1 # 2,1 # 1 # 와 같이 출력을 하기에 아래와 같은 출력 형식을 사용 s = 0 for i in range(1, int(input())-1): s += (i+1)*i//2 print(s, 3) # ===================== # 다만 위의 방식은 효율적이지 못해 다른 사람의 좋은 방식을 찾음 n = int(input()) print(n*(n-1)*(n-2..

알고리즘 2023.07.25

[백준] 알고리즘 수업 - 알고리즘의 수행 시간 4

# 알고리즘의 수행 시간 3과 유사하지만 반복문의 실행이 # 첫 번째 for문에서는 1~ n-1, # 두 번째 for문에서는 i+1 ~ n까지이기에 # 예를 들어 n이 7이라고 한다면 # i가 0일 땐 j는 6번, i가 1일 땐 j는 5번, i가 2일 땐 j는 4번으로 # 6, 5, 4, 3, 2, 1 의 식이 나오기에 아래와 같이 출력을 할 수 있다. n = int(input()) print(n*(n-1)//2, 2)

알고리즘 2023.07.25