전체 보기232 [백준] 15685 드래곤 커브 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 끝점에서 시계 방향으로 90도를 회전하였을 때, 어느 한 점이 끝점을 기준으로 하여 좌표에 어떤 변화가 일어났는지 알아야 했습니다. 90도 회전시 좌표 값의 변화량만 알게 되면, 드래곤 커브의 세대별 좌표를 모두 알아낼 수 있습니다. 문제 예제 1번에서 첫 입력을 예를 들어 (3,3) 을 시작으로 하면, 시작 방향에 따라 끝점은 (4,3) 가 됩니다. 이때 시작점과 끝점을 비교하면, x좌표는 1이 증가하고 y좌표는 변화가 없습니다. 이때 끝점을 기준으로 회전하면 (3,3)의 좌표가 (4,2)로 이동됩니다. 끝점이였던 (4, 3)와 변화된 좌표 (4,2)를 비교하면 x는 변화가 없고, y는 1이 감소하게 됩니다. 이를 토대로 x좌표 증가량만큼 y좌표가 .. 2022. 7. 9. [백준] 18436 수열과 쿼리 37 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 반복적으로 특정 구간의 홀수, 짝수의 개수를 확인해야 하는 문제입니다. 2진 트리를 생성하여 수열의 값들을 리프 노드에 순서대로 기록하고, 부모 노드는 특정 수열의 범위의 값들을 기록하는 세그먼트 트리를 이용하였습니다. 세그먼트 트리의 각 값은 튜플 형태로 (짝수의 개수, 홀수의 개수) 형태로 기록하였습니다. 2) 알고리즘 세그먼트 트리 3) 풀이 코드 사용 언어 - Python import sys sys.stdin = open('input.txt') def make_segment_tree(node, start, end): # 세그먼트 트리 생성 if start >= end: # 리프 노드인 경우 if nums[start] % 2: # 수열 홀수 짝수.. 2022. 7. 8. [React] 숫자 증가 애니메이션 만들기 (with. TypeScript) 여러 웹 서비스를 이용하다 보면 숫자를 강조하는 방법 중 하나로 숫자가 빠르게 올라가는 애니메이션을 확인할 수 있습니다. 리액트를 이용하여 어떻게 구현할지에 대해 작성해보도록 하겠습니다. ❗️ 조건 1. 숫자는 0부터 시작해서 증가해야 합니다. 2. 숫자들이 주어진 시간 동안 증가하는 애니메이션을 보여주어야 합니다. 3. 시간이 흐를수록 숫자 증가량이 줄어들어야 합니다. (easeOut 효과) 📖 컴포넌트 및 변수 구성 컴포넌트와 변수는 해당 포스트 작성을 위해 임의로 작성된 내용입니다. 최종적으로 보여질 숫자와 텍스트를 변수로 저장하였습니다. 부모 컴포넌트를 하나 생성하고, 그 아래에 방문수, 좋아요, 댓글수가 보여질 컴포넌트를 반복문을 이용하여 생성하였습니다. type TyContents = [str.. 2022. 7. 7. [백준] 10423 전기가 부족해 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 발전소가 존재하는 도시에서 출발하여, 다른 도시로 전기가 제공되기 위해 케이블을 설치해야 했습니다. 케이블 설치 비용이 적게 하여 설치가 필요하여, 가중치를 고려하여야 했습니다. 케이블 설치 비용을 적은 것부터 탐색하여 설치하기 위하여 최소힙을 이용하였습니다. 발전소가 있는 도시들을 모두 최소힙에 넣어두고, 탐색을 시작하였습니다. 다음으로 연결된 도시를 케이블의 가중치와, 연결된 도시의 번호를 최소힙에 추가하였고, 케이블 설치 비용이 낮은것부터 설치하도록 하였습니다. 2) 알고리즘 최소 신장 트리 최소힙 3) 풀이 코드 사용 언어 - Python import sys import heapq sys.stdin = open('input.txt') def s.. 2022. 7. 7. [백준] 2623 음악프로그램 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 PD들이 정한 가수의 순서를 모두 만족시키기 위하여, 어떤 한 가수가 순서가 되기 위해서는 그 가수의 앞에 오는 가수들이 모두 순서가 정해졌어야 합니다. 이러한 조건을 만족시키며 순서를 정하기 위해 위상정렬을 이용하였습니다. 2) 알고리즘 위상정렬 3) 풀이 코드 사용 언어 - Python import sys sys.stdin = open('input.txt') N, M = map(int, sys.stdin.readline().split()) # 가수, 보조PD 수 next = [[] for _ in range(N)] # 각 가수 다음에 순서와야 하는 가수 need = [0] * N # 가수 순서 오기 위해 필요한 앞 사람 수 answers = [] .. 2022. 7. 6. [백준] 2660 회장뽑기 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 한 사람이 다른 모든 사람과의 관계 거리가 어떻게 되는지에 대한 정보를 모든 사람을 기준으로 하여 구하여야 했습니다. 처음에 BFS를 이용하여 다른 사람들과의 관계 거리를 구하려 하였으나, 사람의 수가 많아지는 경우에 사람 수에 맞게 BFS 탐색이 필요했습니다. 이러한 경우에 시간 초과 문제를 고려하게 되었고, 이 문제에 조금 더 적합할것 같은 플로이드 워셜을 이용하여 풀이하였습니다. 2) 알고리즘 플로이드 워셜 3) 풀이 코드 사용 언어 - Python import sys sys.stdin = open('input.txt') N = int(sys.stdin.readline()) # 사람 수 answers = [[1e10] * N for _ in ra.. 2022. 7. 5. [백준] 1516 게임 개발 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 건물을 짓기 위해 필요한 건물의 개수와 해당 건물이 완성되면 다음에 건설 가능한 건물의 목록을 리스트로 관리하였습니다. 건물을 전체적으로 탐색하여 바로 건설이 가능한 목록을 찾은 후 해당 건물이 완성되면 건설이 가능한 다음 건물을 찾았습니다. 그 건물을 짓는데 필요한 앞 건물의 개수 카운트를 1씩 감소시켰고, 0이 되었을 때 건물을 짓도록 하였습니다. 2) 알고리즘 위상정렬 3) 풀이 코드 사용 언어 - Python import sys from collections import deque sys.stdin = open('input.txt') N = int(sys.stdin.readline()) # 건물 수 linked = [[] for _ in ran.. 2022. 7. 4. [백준] 11437 LCA 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 공통의 부모를 찾기 위하여 DFS 탐색을 이용하였습니다. 처음에 DFS 탐색을 루트 노드부터 시작하여 아래 노드로 진행하였고, 해당 노드까지 진행하며 지나친 노드들을 리스트로 기록하였습니다. 위의 작업을 통해 각 노드별로 바로 위 부모부터 루트노드까지 경로가 기록되어 있었습니다. 그 이후 비교할 두 노드의 경로를 가져와 한 노드의 경로에서 요소를 하나씩 가져와 다른 노드 경로에 포함되는지 여부로 공통 부모를 확인하였습니다. 한 번만 DFS탐색을 진행하고, 두 노드의 부모를 찾을때는 기록된 경로들만 가져와 공통 요소를 찾았기 때문에 적은 시간이 소요되었지만, 각 노드별로 모든 부모의 경로를 기록하였기 때문에 메모리 초과가 발생하였습니다. 시간이 조금 더.. 2022. 7. 3. [백준] 9466 텀 프로젝트 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 학생들이 한명을 선택하여 팀이 이루어지는 경우는 사이클이 이루어지는 경우입니다. 따라서, 학생들을 탐색하며 사이클이 이루어지는 경우를 탐색하면 되었습니다. 학생들을 순서대로 탐색하였고, 이미 탐색을 했다면 이후에 같은 학생을 탐색하여도 어차피 같은 결과이므로 한번만 확인하도록 방문 변수를 만들어 확인하였습니다. 2) 알고리즘 DFS 3) 풀이 코드 사용 언어 - Python import sys sys.stdin = open('input.txt') def solution(start): stack = [start] pick = [] # 선택된 학생들 while stack: node = stack.pop() if not visited[node]: # 현재 .. 2022. 7. 2. [백준] 11559 Puyo Puyo 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 뿌요가 현재 위치한 좌표와 색상 정보를 딕셔너리에 기록하였습니다.(키 - 좌표, 값 - 색상) 키 값들을 반복하여 인접하고 색상이 동일한 뿌요를 DFS 탐색하였습니다. 4개 이상이 연결되어 있다면 터트리기 위하여 빈 리스트에 좌표값들을 추가적으로 기록하였습니다. 한번의 턴에서 뿌요를 모두 터트렸고(딕셔너리에서 키를 제거), 딕셔너리의 키를 내림차순으로 정렬하여 동일한 열과, 가장 아래의 행(바닥)에서부터 반복이 되도록 구현하였습니다. 새로운 열을 탐색할때, 가장 바닥의 행 인덱스를 초기화하였고, 바로 위의 뿌요의 행과 바닥 행을 서로 비교하여 중력 작용 여부를 판별하였습니다. 2) 알고리즘 구현 DFS 탐색 3) 풀이 코드 사용 언어 - Python .. 2022. 7. 1. [백준] 3055 탈출 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 특정 좌표로 이동하는 최소 시간을 구해야하므로 BFS를 이용하였습니다. 한번의 시간 흐름에 고슴도치와 물이 움직여야 하므로, 시간의 흐름에 따라 구현되도록 하였습니다. 고슴도치와 물이 움직여야 할 좌표들을 집합으로 분류하였습니다. 한번의 시간 흐름에 고슴도치와 물을 모두 이동시키면서 다음번에 이동을 해야할 좌표들을 새로운 집합에 추가하였습니다. 이때, 고슴도치가 이동 가능하여 집합에 추가하였으나 동일한 시간에 물이 들어와 고슴도치가 이동할 수 없는 경우가 발생합니다. 이러한 경우의 고슴도치 좌표를 제거하기 위하여, 고슴도치 이동 좌표 집합에서 물 이동 좌표 집합의 요소들을 빼주었습니다. 2) 알고리즘 BFS 구현 3) 풀이 코드 사용 언어 - Pyth.. 2022. 6. 30. [백준] 17281 ⚾ 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 1번 선수는 4번 타자로 정해져 있고, 나머지 선수들은 순서가 정해져 있지 않아 선수들이 갈 수 있는 모든 순서를 구해야 했습니다. 완전 탐색을 이용하여 가능한 모든 경우를 구하였고, 각 경우마다 이닝을 시뮬레이션하여 득점 가능한 점수들을 구하였습니다. 각 이닝을 시뮬레이션하는 로직에서 1루, 2루, 3루를 리스트로 관리하였고, 반복문을 이용하여 안타, 2루타, 3루타, 홈런의 경우에 모두 적용이 가능하도록 구현하였습니다. 그러나 문제에서 주어진 제한된 시간에 통과하지 못하였습니다. 이후 관련 내용에 대하여 찾아보니 Python3 으로 통과하기에는 거의 불가능하고, PyPy3 에서도 베이스를 리스트로 관리하면 시간 제한에 걸린다는 사실을 알게 되었습니.. 2022. 6. 29. 이전 1 2 3 4 5 6 ··· 20 다음