새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기

전체 보기232

[백준] 13023 ABCDE 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 접근 및 이해 그래프에서 계속해서 다음 깊이를 탐색하는 것으로 깊이가 5가 되는 관계가 있는지 탐색이 필요했습니다. DFS를 재귀로 구현하여 ABCDE 관계가 있는지 여부를 탐색하였습니다. 2) 알고리즘 DFS 재귀 3) 풀이 코드 사용 언어 - Python import sys sys.stdin = open('input.txt') def solution(node, ans): # 현재 사람 번호, 탐색 깊이 global answer if ans >= 5: # ABCDE 관계가 된다면 answer = True # 정답 변경 return visited[node] = 1 # 현재 사람 탐색 체크 for next in linked[node]: # 현재 사람과 친구인 사람들 .. 2022. 6. 14.
[React Native] 모바일 서비스 개발 유형과 프로젝트에 사용한 이유 많은 사람들이 모바일 환경에서 여러 서비스를 이용하고 있습니다. 이에 맞춰 모바일 서비스 개발을 고려하게 되는데, 모바일 서비스 개발하는 방식에는 여러 가지가 존재합니다. 이번 포스트에서는 모바일 서비스를 개발하는 여러 유형들에 대해 특징, 장단점을 알아보고 비교해 보도록 하겠습니다. 또한, 제가 진행한 프로젝트에서 여러 방식들 중에서 React Native를 선택하여 개발하게 된 이유에 대해 작성하였습니다. 📘 모바일 서비스 개발 유형 모바일 환경에서의 서비스를 제공하기 위하여 네이티브 앱, 웹, 하이브리드 등 여러 방법으로 개발하여 서비스를 제공하고 있습니다. 개발하는 여러 방법들에 간략히 알아보도록 하겠습니다. 네이티브 앱 여러 서비스에서 제공하는 방법으로 스마트폰이나 태블릿에 어플리케이션을 설치하.. 2022. 6. 13.
[백준] 10282 해킹 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 접근 및 이해 하나의 컴퓨터가 해킹되어 의존되어 있는 다른 컴퓨터가 일정 시간이 지나면 감염이 되므로 하나의 컴퓨터에서 다른 여러 컴퓨터를 감염 시킬때 모두 소요되는 시간이 다르므로 시간이 병렬적으로 진행되도록 할 필요가 있습니다. 특정 컴퓨터 하나가 감염이 완료되는 시간을 기록하도록 변수를 이용하였습니다. 다음으로 의존성 있는 다른 컴퓨터를 감염시킬 때, 현재 완료된 시간에 다른 컴퓨터로 감염이 되는데 필요한 시간을 더하여 감염이 완료되는 시간을 기록하였습니다. 최소 힙을 이용하여 감염이 가장 빠르게 완료되는 컴퓨터를 하나씩 탐색하여 감염되는 컴퓨터의 수와 시간을 기록하였습니다. 2) 알고리즘 다익스트라 3) 풀이 코드 사용 언어 - Python import sy.. 2022. 6. 12.
[백준] 1507 궁금한 민호 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 접근 및 이해 모든 도시를 기준으로 하여 다른 도시로 이동할 때 필요한 최소 거리가 입력으로 주어집니다. 입력으로 주어진 최소 거리 정보를 유지하면서 도로의 개수를 최소로 만들어, 남아있는 도로 거리의 총합을 구하여야합니다. 도로 거리 구하는 것이 불가능한 경우는 입력으로 주어진 최소 거리 정보가 잘못된 정보일 경우였습니다. 그래서 입력으로 주어진 정보를 그대로 이용하여 최초 1회 플로이드 워셜로 도시 간 최소 거리를 한번 더 구하였습니다. 이후에 값이 변한다면, 문제에서 요구하는 불가능한 경우로 -1을 출력하였습니다. 입력으로 주어진 2차원 배열의 최소 거리 정보가 다른 도시를 거치지 않고 두 도시를 바로 잇는 도로의 길이라고 가정하였습니다. 그리하여 두 도시를 .. 2022. 6. 11.
[백준] 1613 역사 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 접근 및 이해 모든 사건을 기준으로 하여 다른 사건과의 전후 관계를 알아내야 하므로 플로이드 워셜을 이용하여 풀이하였습니다. 2) 알고리즘 플로이드 워셜 3) 풀이 코드 사용 언어 - Python import sys sys.stdin = open('input.txt') N, K = map(int, sys.stdin.readline().split()) # 사건의 수, 사건 비교 수 history = [[0] * N for _ in range(N)] # 사건 순서 정보 for _ in range(K): before, after = map(int, sys.stdin.readline().split()) history[before-1][after-1] = 1 # 이전 사건,.. 2022. 6. 10.
음성 녹음 크로스브라우징 이번 포스트는 말듣꾸 프로젝트를 진행하는 당시 겪었던 이슈로 음성 녹음 기능을 구현하는 과정에서 OS와 브라우저에 따라 녹음이 불가능한 문제를 대응하였던 내용을 다루었습니다. 말듣꾸 프로젝트는 테스트 서비스로 사용자가 음성을 녹음하여 제출하면, 사용자가 어느 지역의 방언을 구사하는지 학습된 인공지능이 추론하여 결과를 제공하는 서비스입니다. 프로젝트에 관한 자세한 사항은 링크를 통해 확인 부탁드립니다. 🔥 발생한 이슈 음성 녹음 기능을 추가하기 위하여 MediaRecorder 를 이용하였습니다. 해당 기능을 Chrome 브라우저를 기준으로하여 개발을 진행하였는데, MediaRecorder 인스턴스 생성시 옵션으로 mimeType 을 Chrome 에서 사용가능한 audio/webm 으로 지정하였습니다. 기능.. 2022. 6. 9.
[백준] 10159 저울 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 접근 및 이해 모든 물건들에 대해서 각 물건이 다른 물건들과 무게 비교가 가능한지 탐색하는 문제입니다. 모든 물건들에 대해서 탐색이 필요하므로, 플로이드 워셜을 이용하엿습니다. 물건들을 비교하였을 때 순서에 대한 정보는 필요가 없으므로, 해당 물건 보다 크거나 작은지에 대한 정보만 기록하였습니다. 2) 알고리즘 플로이드 워셜 3) 풀이 코드 사용 언어 - Python import sys sys.stdin = open('input.txt') N = int(sys.stdin.readline()) # 물건의 개수 M = int(sys.stdin.readline()) # 물건 비교한 횟수 order = [[0] * N for _ in range(N)] # 물건들 간 무게 .. 2022. 6. 9.
[Next.js] SSR, SSG, ISR 구성하기 이전 포스트를 통해 Next.js 에서 SSR(Server Side Rendering) 과 SSG(Static Site Generation)의 방식으로 페이지를 생성하는 방법에 대해 다루었습니다. 이번 포스트에서는 SSR, SSG 과 함께 추가적으로 ISR(Incremental Static Regeneration)도 함께 다루어보겠습니다. 이전의 Next.js 기본 개념과 프로젝트에 사용한 이유 포스트에서 CSR, SSR, SSG 방식에 대한 설명을 이미 다루었으므로 관련된 설명은 생략하도록 하겠습니다. 관련 내용 확인이 필요한 경우 위의 포스트를 확인해주시기 바랍니다. 📘 SSR SSR(Server Side Rendering) 은 사용자가 서비스에 접속하여 서버로 요청을 보내는 경우, 서버에서 렌더링을.. 2022. 6. 9.
[백준] 1956 운동 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 접근 및 이해 특정 마을에서 운동을 출발하여, 다시 출발 마을로 돌아오는 길이 짧은 경우를 구해야 했습니다. 하나의 마을에서 출발하는 경우, 다익스트라를 이용하면 편리하지만 모든 마을에서 사이클이 존재하는지 확인이 필요하므로 플로이드 워셜 알고리즘을 이용하였습니다. 플로이드 워셜 알고리즘을 이용하여 모든 마을에서 최소 사이클을 한번에 구하도록 하였습니다. 2) 알고리즘 플로이드 워셜 3) 풀이 코드 사용 언어 - Python import sys sys.stdin = open('input.txt') V, E = map(int, sys.stdin.readline().split()) # 마을, 도로 개수 distance = [[1e10] * V for _ in range.. 2022. 6. 8.
[백준] 2458 키 순서 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 접근 및 이해 학생의 키를 비교하기 위하여 DFS, BFS, 다익스트라 탐색을 고려하였으나, 학생들간 비교 정보에 대해서 모든 학생들을 기준으로 확인해야 했으므로 여러번 탐색이 필요하였습니다. 이러한 경우 제한 시간 문제가 발생하였습니다. 이후 플로이드 워셜을 고려하였으며, 처음에는 현재 학생보다 키가 큰 경우에는 배열의 값을 1, 작은 학생의 경우 -1 의 가중치를 주었습니다. 이후 판별에서는 탐색하는 학생과 같은 레벨에 있는 학생이 있는지 여부로 판별하려 하였으나, 예외 사항이 발생하였습니다. 가중치를 1과 -1로 주게 되어 같은 레벨에 존재하지 않지만, 키를 비교할 수 없는 경우가 발생하였습니다. 이러한 문제를 해결하기 위하여 -1 의 가중치를 제거하고, 학생.. 2022. 6. 7.
[백준] 11404 플로이드 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 접근 및 이해 초기에 특정 노드에서 다른 노드로 가는 최단 거리를 구하기 위하여 다익스트라를 이용하여 구하였습니다. 그러나 모든 노드에서 다른 노드로 이동하는 최단 거리를 구하여야 했기에, N개에 노드에 대해서 다익스트라를 N번 이용하여야 했습니다. 이로 인하여 시간 초과가 발생하였습니다. 모든 노드에서 다른 모든 노드로 이동하는 최단 거리를 한번에 구하기 위하여 '플로이드 워셜' 알고리즘을 이용하였습니다. 다익스트라와 플로이드 워셜 알고리즘의 용도에 대해 비교를 간단하게 해보자면, 다익스트라는 특정 노드에서 출발하여 다른 노드들로 향하는 최단 거리를 빠르게 구할 수 있다면, 플로이드 워셜 알고리즘은 모든 노드에서 다른 노드들로 향하는 최단 거리를 구할 수 있습니다.. 2022. 6. 5.
[백준] 2589 보물섬 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 접근 및 이해 문제를 처음 접했을때, 트리의 지름을 구하는 원리를 이용하였습니다. 여러 육지로 이루어진 하나의 대륙(덩어리)의 한 좌표에서 가장 멀리 있는 좌표를 구한 이후 다시 그 좌표에서 가장 멀리 있는 값을 구하였습니다. 그러나 육지가 트리와 같은 형태를 이루지 않는 경우가 존재하였습니다. 예를 들어 하나의 노드를 선택하여 루트노드로 지정하였다면 다른 노드들은 자식 노드가 되는데, 특정 경우에 어떤 좌표를 루트노드로 지정하였는데 리프노드가 다시 루트노드와 이어지는 순환하는 형태를 나타냈습니다. 이러한 경우에 올바른 정답을 찾을 수 없었습니다. 이후 모든 좌표들을 한번씩 BFS를 이용하여 탐색하며 가장 먼 거리를 구하였고, 그 거리들 중 가장 긴 값을 계속해서 .. 2022. 6. 3.