Algorithm 썸네일형 리스트형 [Baekjoon]백준 1992 쿼드트리(실버 1) - Python 문제를 살펴보면 이전 문제(2630 색종이 만들기)와 조건은 비슷하다다른 점이라하면 비디오가 나누어질때마다 괄호가 출력되어야하며 각 색깔을 출력해야한다는 점이다일단 입력받은 값을 처리하는 코드를 작성해주어야한다이전까지 자주 사용하였던 input().split()이 아니라 공백없이 입력받으므로 input().strip()으로 입력받아야한다size = int(input())video = []for _ in range(size): video.append(list(map(int, input().strip())))그리고 이번에는 괄호가 포함되어있기 때문에 결과값을 저장하는 리스트를 따로 만들어주었다이후 함수를 호출하고, 이를 언패킹하는 방식으로 출력하도록 하였다result = []sol(0, 0, size).. 더보기 [Baekjoon]백준 2630 색종이 만들기(실버 2) - Python 문제를 살펴보면 각 정사각형(사이즈는 2^0, 2^1....) 안에 하나의 색깔만 존재하도록 하는 경우를 찾아그 정사각형의 색이 하얀색인 경우와 파란색인 경우를 각 줄마다 출력하는 문제이다해당 문제를 풀기위해서 재귀함수를 사용하는 방법을 생각하였다 만약 정사각형 안을 확인하다가다른 색깔이 등장하면 그 정사각형에서 size별로 다시 나누어야하기 때문이다 그래서 특정 사각형의 제일 첫번째 위치의 색깔을 기준으로 삼고, for문을 통해 전체 정사각형의 색깔을 확인하는 로직을 작성하였다 이후에 if문을 통해서 색이 다른 경우를 찾게되고, 만약 그러한 경우를 찾게 된다면재귀적으로 함수를 호출하되, size는 2로 나눈 값을 넣어주고 x, y는 새로운 size에 맞게 이동하여주면 된다sol(x, y, size //.. 더보기 [Baekjoon]백준 13305 주유소(실버 3) - Python 문제를 살펴보면 최소한의 비용으로 제일 왼쪽 도시에서 제일 오른쪽 도시로 이동하는 방법을 찾아야한다일단 제일 처음 이동할 때에는 기름이 없기 때문에 그 다음 도시로 이동할 정도의 비용은 무조건 지불해야한다그러지 않으면 이동자체가 불가능하기 때문이다이후에는 어떠한 방법으로 해결하였는지 서술하자면 최소한의 비용으로 가기 위해서는 특정 지점의 주유소 비용으로더 적은 비용을 지불가능하기 전까지는 이동해야한다result = distance[0] * cost[0]min_cost = cost[0]뒤의 부분에 대해 예제로 설명하자면 주유소의 가격이 2인 곳에서 1까지 이동하려면 4리터를 필요로하는데, 2원인 주유소에서 4리터를 지불하는 것이 가격이 4인 곳에서 1리터를 추가적으로 지불하는 것보다 저렴하다식으로 계산해보.. 더보기 [Baekjoon]백준 1541 잃어버린 괄호(실버 2) - Python 문제를 살펴보면 주어진 식을 보고 적절한 위치에 괄호를 사용하여 최솟값을 만드는 문제이다처음에는 문제를 잘못 이해하고 주어진 연산자와 숫자를 이용하여 최솟값을 만들면 되는줄 알았다 일단, 주어진 식을 적절히 분리하기 위해 for문과 isdigit()함수를 이용하여 연산자, 숫자를 따로 리스트에 저장하였다그리고 마지막 for문 이후 숫자는 저장되지 않기 때문에 따로 if문을 추가하여 마지막 숫자를 저장해준다이후에 sort()를 이용하여 밑의 사진처럼 숫자와 연산자를 각각 정렬해주고, 큰 수들을 더한 다음작은수에서 큰 수들을 빼는 방식으로 코드를 작성하였다formula = input()number = []operator = []temp_num = ''for char in formula: # 부호와 숫자 분리.. 더보기 [Baekjoon]백준 11399 ATM(실버 4) - Python 문제를 살펴보면 각 사람마다 돈을 인출하기 위해 걸리는 시간을 순서대로 입력받고모두가 돈을 인출하는데 걸리는 시간의 합이 최소가 되는 경우를 찾아 그 합을 출력하여야한다가장 적은 시간이 걸리도록 하려면 빨리 뽑을 수 있는 사람이 먼저 뽑는 것이 전체를 위해선 제일 좋은 선택이다만약 1분, 2분만에 출력가능한 사람을 두고 30분이 걸리는 사람이 먼저 뽑게된다면1분, 2분만에 뽑는 사람들은 30분을 기다려야하지만 본인이 인출할 수 있기 때문에모든 인원이 걸리는 시간을 고려하면 비효율적인 방법이라고 할 수 있다그래서 입력받은 리스트의 정보를 sort()함수로 정렬하고, 정렬한 값 순서대로 누적합 알고리즘을 사용하여각 순서에 따라 걸리는 시간을 저장해주었다 이후에 해당 리스트의 전체 합을 출력하도록 코드를 작성.. 더보기 [Baekjoon]백준 1931 회의실 배정(골드 5) - Python 문제를 살펴보면 여러가지 회의 일정들이 주어지고, 그 일정을 보고 최대한 많은 회의를 할 수 있는 시간표를 짜야한다그래서 처음에 들었던 생각이 모든 경우의 수를 확인하고, 그 중에서 가장 큰 값을 출력하는 것이 간단하긴하지만중첩 for문을 사용하면 시간복잡도 측면에서 상당히 불리하다는 생각이 들었다 회의 기간을 짧은 것을 기준으로 정렬을 하게 되면 시작시간, 종료시간이 각각 달라서순서가 이상할 것 같다는 생각이 들어서 시작 시간 또는 종료 시간을 기준으로 sort하여 카운트 하는 방법을 생각했다 시작 시간으로 정렬하다보니 더 짧은 시간으로 회의가 진행되는 경우를 놓치게 되는 것을 확인하였다예를 들어 (0, 6), (1, 3), (4, 5) 와 같은 경우가 있을 때 시작 시간을 기준으로 정렬하면(0, 6).. 더보기 [Baekjoon]백준 11047 동전 0(실버 4) - Python 문제를 살펴보면 최소한의 동전을 사용하여 비용을 지불하여야한다최소한의 동전을 사용하려면 가진 동전중에서 남은 비용에 가장 가까운 동전을 사용하여야한다즉 5000원이 남았을때 500, 1000, 5000, 10000이 있다면 5000원을 사용하는 것이 제일 효율적이다이러한 계산을 하기 위해 일단 입력받은 동전을 리스트로 저장해주었다제일 뒤에 위치한 index가 가장 큰 금액이므로 index의 시작점을 n-1로 두어 -1을 해가면서 확인하면 된다그리고 해당 동전이 지불해야하는 금액보다 작다면 해당 동전의 값을 빼며 while문을 통해 반복해준다kind, money = map(int, input().split())coin = []for _ in range(kind): coin.append(int(inpu.. 더보기 [Baekjoon]백준 25682 체스판 다시 칠하기 2(골드 4) - Python 문제를 살펴보면 예전에 풀었던 체스판 칠하기의 업그레이드 버전인듯하다그래서 이전에 풀었던 코드를 참고하여 코드를 작성해보았다n, m = map(int, input().split())chess = []result = []for _ in range(n): # 2차원 배열로 변환 row = list(input().strip()) chess.append(row)for i in range(n - 7): for j in range(m - 7): count_1 = 0 count_2 = 0 for x in range(i, i + 8): for y in range(j, j + 8): if (x + y) % 2 == 0: .. 더보기 이전 1 ··· 5 6 7 8 9 다음