[백준/Python] 2563번 색종이
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/2563문제 이해흰색 도화지의 크기가 100X100으로 정해져있다.이 문제는 2차원 행렬을 이용하여 푸는 문제이다. 2차원 행렬을 0으로 초기화 한 후, 검정색 색종이가 있는 부분을 1로 할당한다. 그리고 2차원 행렬의 합을 구하면 이 문제는 해결된다. 이렇게 구하면 겹치는 부분을 신경 쓸 필요 없이 검은 영역의 넓이를 구할 수 있다.문제 풀이(정답)n = int(input())paper = [[0] * 100 for _ in range(100)]for _ in range(n):    x, y = map(int, input().split())    for i in range(x, x+10):        for j in range(y, y+10..
[백준/Python] 2606번 바이러스
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/2606문제풀이(정답)이번 문제는 딱 보고 BFS문제이구나 생각했다. 노드간에 연결되어있는 관계만 파악하면 문제를 풀 수 있겠다 판단했다.그래서 지난 번에 풀었던 1260번 DFS와 BFS문제를 참고하여 풀었다.원래 다른 블로그와 챗지피티의 도움도 살짝 받으면서 푸는데 이번에는 내가 전에 푼 문제만 참고하여 풀었다.앞으로 아무도움을 받지 않고 풀때까지 열심히 해야겠다.n = int(input())m = int(input())graph = [[0] * (n+1) for _ in range(n+1)]for _ in range(m):    x, y = map(int, input().split())    graph[x][y] = graph[y][x] ..
[백준/Python] 11659번 구간 합 구하기 4
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/11659문제풀이(시간초과1)처음에 문제를 접했을 때는 sum으로 풀면 아주 간단하겠다. 하지만 또 시간초과가 되겠지? 하면서 내가 가장 익숙한 방법인 sum을 이용해 문제를 풀었다. 제출 후 결과를 보니 역시나 시간초과 엔딩..# 시간 초과n, m = map(int, input().split())arr = list(map(int, input().split()))for _ in range(m):    i, j = map(int, input().split())    print(sum(arr[i-1:j]))문제풀이(시간초과2 : input)그래서 어떤 방식으로 풀어야하지? 고민하다가 누적 합 알고리즘을 알게되었다.누적 합 알고리즘이란? 리스트의 각..
[백준/Python] 1629번 곱셈
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/1629문제 이해문제 이해는 간단했다.a를 b번 거듭제곱 한 후, 그 수를 c로 나눈 나머지 값을 출력하면 되는 간단한 문제라 생각했다. 하지만 시간초과의 벽에 부딪혔다...문제 풀이(시간초과 : pow)# 시간초과(pow)a, b, c = map(int, input().split())ans = pow(a, b)print(ans % c) 역시 실버는 실버인 이유가 있다.이렇게 간단하게 풀릴 문제가 아니다.문제 풀이(RecursionError : 재귀함수)# 재귀함수(RecursionError)a, b, c = map(int, input().split())def power(x, y):    if y == 1:        return x    r..
[백준/Python] 2178번 미로 탐색
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/2178문제이해문제 이해는 꽤 쉬웠다. 1을 따라 최단 경로로 도착지까지 도착하면 되는 문제였다.이것 역시 너비우선탐색(BFS)로 푸는 문제이다.문제풀이(정답)from collections import dequen, m = map(int, input().split())lines = [list(map(int, input().strip())) for _ in range(n)]dx = [0, 1, 0, -1]dy = [1, 0, -1, 0]def bfs(x,y):    queue = deque([(x,y)])    while queue:        x, y = queue.popleft()      # 방문 좌표 제거        for i in r..
[백준/Python] 1697번 숨바꼭질
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/1697문제 풀이(정답)from collections import dequen, k = map(int, input().split())visited = [0] * 100001def bfs():    q = deque()    q.append(n)    while q:        x = q.popleft()        if x == k:            print(visited[x])            break        for j in (x-1, x+1, 2*x):            if 0 100000 and not visited[j]:                visited[j] = visited[x] + 1          ..
[백준/Python] 1260번 DFS와 BFS
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/1260개념 이해오늘은 미루고 미뤄왔던 DFS와 BFS의 개념을 정리하며 문제를 풀어보려 한다.학부 과정중에 잠깐 배웠던 적이 있는데 다 까먹어버렸다.. 용어정리정점 / 노드 : 특정 위치간선 : 위치 간의 관계, 정점(노드)을 연결한 선 DFSDFS란? 깊이 우선 탐색, 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘재귀 함수 또는 스택을 이용해 알고리즘을 구현한다. BFSBFS란? 너비 우선 탐색, 그래프에서 가까운 노드부터 우선적으로 탐색하는 알고리즘큐를 이용해 알고리즘을 구현한다.문제풀이(정답)n, m, v = map(int, input().split())# 행렬 만들기graph = [[0] * (n+1) for _ in range(..
[백준/Python] 2579번 계단 오르기
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/2579문제이해이 문제는 딱 보자마자 다이나믹 프로그래밍을 이용해서 풀어야 하는구나 생각했다. 아래의 조건을 살펴보았다.계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다.연속된 세 개의 계단을 모두 밟아서는 안 된다.마지막 도착 계단은 반드시 밟아야 한다.마지막 3번째 조건은 마지막 계단을 무조건 밟아야 한다는 것이니 마지막 계단부터 계산을 하면 점화식을 세울 수 있을 것이라 생각했다.점화식바로 직전 계단을 밟을 때dp[i] = stairs[i] + stairs[i-1] + dp[i-3]전 전 계단을 밟을 때dp[i] = stairs[i] + dp[i-2]바로 직전 계단을 밟을 경우,계단 세 개를 연속으로 밟을 수 없으므로 현재 계단 +..
[프로그래머스/Python] 실패율
·
알고리즘문제풀이
문제https://school.programmers.co.kr/learn/courses/30/lessons/42889 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제이해말 그대로 각 스테이지의 실패율을 구해서 실패율이 큰 스테이지 번호 순서대로 추출하는 문제였다.문제 이해는 예시를 보니 이해가 딱 가서 음 금방 풀 수 있겠군 하면서 자신있게 풀기 시작했다.문제풀이(내가 푼 코드)def solution(N, stages):    answer = []    bm = []    bj = []    temp = []    ratio = []    for i in range(1, N+1):        bj...
[백준/Python] 1002번 터렛
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/1002문제이해이 문제를 처음 읽고서는 이해가 잘 되지 않았다.이해가 되지 않아 직접 그림을 그려보니 이 문제는 두 원의 교차점의 개수를 구하는 문제였다. 수학 안푼지 오래됐는데...수학 개념을 검색해 보고 풀어봤다.※ 두 원의 교차점의 개수두 원이 아예 같은 경우 (무한대 개)x,y 좌표와 반지름의 길이가 같다.외부에서 만나지 않는 경우 (0개)d > r1​+r2​ : 두 원의 반지름을 더해도 중심 거리보다 작음내부에서 만나지 않는경우 (0개)d ∣ r1​−r2 ​∣ : 하나의 원이 다른 원 안에 있지만, 닿지 않음 외접하는 경우 (1개)d = r1​+r2​ : 반지름을 더한 값이 중심 거리와 같음내접하는 경우 (1개)d=∣ r1​−r2 ​|..