전체 글

열심히 사는 태윤씨
1. 문제 설명https://school.programmers.co.kr/learn/courses/30/lessons/64064 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr2. 풀이 과정문제 해결의 흐름 입력값의 범위를 살펴보면 user_id 배열의 크기는 1 이상 8 이하이고, banned_id 배열의 크기는 1 이상 user_id 배열 크기 이하입니다. 입력이 작기 때문에 모든 경우를 직접 탐색하는 방식으로 접근했습니다. 따라서 먼저 백트래킹을 통해 각 banned_id가 어떤 user_id들을 벤할 수 있을지 체크하며 후보 배열에 집어넣었습니다. 길이가 같고, *이 아닌 자리의 문자가 모두 일치하면 벤 ..
1. 문제 설명https://school.programmers.co.kr/learn/courses/30/lessons/42627 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr2. 풀이 과정문제 해결의 흐름 제목, 입력값, 요구사항을 파악해보면, 작업의 번호, 요청 시각, 소요 시간을 가진 작업들이 주어지고, 디스크 컨트롤러가 비선점으로 하나씩 처리할 때 평균 반환시간(종료 시각 - 요청 시각)을 최소로 만들어야 하는 문제입니다. 작업의 우선순위는 소요 시간이 짧은 것 > 요청 시각이 빠른 것 > 번호가 작은 것 순이고, 시점이 같은 작업도 대기 큐에 넣어야 합니다. 따라서 대기 큐를 우선순위 큐(최소 힙)로 ..
1. 문제 설명https://school.programmers.co.kr/learn/courses/30/lessons/150365 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr2. 풀이 과정문제 해결의 흐름 제목, 입력값, 요구사항을 파악해보면, 출발지 (x, y)에서 목적지 (r, c)까지 정확히 k번 이동하는 경로 중 사전순으로 가장 빠른 경로를 구하는 문제라고 이해했습니다. 먼저 출발지에서 목적지까지의 맨해튼 거리 d를 구해 초기 조건을 판별했습니다. d가 k보다 크면 k번 안에 도착할 수 없고, k - d가 홀수라면 남는 이동 횟수를 왕복으로 소모할 수 없으므로 두 경우 모두 "impossible"을 반..
1. 문제 설명링크 : https://school.programmers.co.kr/learn/courses/30/lessons/1605852. 풀이 과정문제 해결의 흐름 제목, 입력값, 요구사항을 파악해보면 보드가 3x3 배열로 한정되어 있고, 주어진 상태가 실제 규칙대로 진행된 게임에서 나올 수 있는지만 판별하면 되는 문제입니다. 따라서 복잡한 탐색 없이 조건 검사(구현) 문제로 보았습니다. 문제 예제만 보더라도 실수한 경우의 수가 몇 가지로 정해져 있을 거 같다고 생각되었습니다. O가 선공이고 번갈아 두어야 하며, 누군가 승리하면 즉시 게임이 끝난다는 규칙에서 아래 네 가지 조건을 뽑아냈습니다. 첫 번째, X의 개수가 O의 개수보다 더 큰 경우는 불가능합니다. 두 번째, O의 개수가 X의 개수보다 2..
이번 게시물은 3월 초 코드몬스터 백엔드 팀에 합류 뒤, 이미지 업로드 기능을 개선한 과정을 자세히 풀어보려고 합니다.1. 기존 이미지 업로드 방식의 문제점 저희 서비스에서는 사용자가 알고리즘 문제 풀이 글을 작성할 때 이미지를 함께 업로드할 수 있는 기능을 제공해왔습니다. 초기에는 단순히 이미지들을 Multipart 방식으로 백엔드에 이미지 파일들을 전송하고, 백엔드에서 해당 이미지 파일들을 AWS S3에 업로드한 뒤, S3 image URL로 변환해 사용하는 구조로 개발해왔습니다. 이 방식은 처음에는 간단하고 빠르게 개발하는데 문제 없었지만, 시간이 지나며 아래와 같은 여러 문제점들이 발생하기 시작했습니다. (1) 게시글 수정 시 이미지 순서 트래킹 문제 사용자가 기존 게시글을 수정하며 이미지를 ..
1. 기존 방식에서 느낀 불편점들 카테캠과 해커톤 프로젝트를 진행하면서 여러 번 배포를 경험했지만, 할 때마다 어딘가 모를 불편함을 느꼈다. 😔 매번 터미널을 열어 SSH로 EC2 서버에 접속한 뒤, .sh 스크립트를 실행하는 방식으로 배포를 진행했다. 처음에는 내 손으로 직접 서버에 코드를 배포했다는 성취감이 있었지만, 여러 프로젝트에서 계속 이런 수동 배포를 반복하다 보니 분명한 한계를 느끼게 되었다.#!/bin/bash# 실행 중인 애플리케이션 종료echo "Stopping existing application..."PID=$(pgrep -f 'java -jar')if [ -n "$PID" ]; then kill -9 $PID echo "Application stopped (PID: $PI..
1. 문제 설명링크 : https://www.acmicpc.net/problem/10122. 풀이과정문제 해결의 흐름 문제를 살펴보면, 배추가 심어진 위치값들이 주어지고 서로 연결된 배추들이 하나의 집합(덩어리)를 형성함을 알 수 있습니다. 따라서 이 문제는 bfs를 통해 그래프에서 연결된 요소들의 개수를 찾아내는 문제임을 파악하였습니다. 입력값을 저장하기 위해 배추 밭은 저장하는 2차원 벡터(graph), 방문 여부를 체크하는 2차원 벡터(visited)를 사용하였습니다. 그러나 테스트케이스마다 graph와 visited를 초기화해야 하므로 다음 2가지 방법 중 하나를 사용할 수 있었습니다.전역 변수 2차원 벡터를 선언하고 assign()을 활용하여 크기를 재할당한다.테스트케이스마다 새로운 지역 변수로..
1. 문제 설명 링크 : https://www.acmicpc.net/problem/11672. 풀이과정문제 해결의 흐름  트리에서 임의의 두 점 사이의 거리에 대하여 가장 긴 거리를 찾는 문제이기에 임의의 두 점 사이의 거리를 모두 구해 가장 긴 거리를 찾는 방법을 떠올렸습니다. 즉, 완전탐색과 BFS를 결합하여 문제를 풀고자 하였습니다. 하지만 아래와 같은 트리 구조를 예로 들어봤을 때, 굳이 완전탐색을 적용하여 모든 점을 탐색할 필요 없이 더 간단하게 풀 수 있는 방법이 있지 않을까 고민했습니다. 1 / \ 2 3 / \ 4 5 \ 6    3. BFS는 특정 노드에서 출발하여 모든 노드를 ..
pykido
태윤 개발 블로그