전체글보기 183

나쁜 경험은 없다

You can't connect the dots looking forward; you can only connect them looking backwards. 스티브 잡스가 생전 했던 말입니다.과거에는 그 경험이 미래에 어떻게 이어질지 몰랐지만 언젠가 미래에 연결되어 삶에 큰 변화를 가져온다는 말입니다. 스티브잡스가 정규과목이 아닌 캘리그라피 과목을 청강한 덕에 뛰어난 디자인의 폰트들을 맥에 접목시킬 수 있었다는 이야기는 무척 유명합니다. 그의 말처럼 어떤 경험이든 그 경험은 미래의 자신에게 긍정적인 영향을 줄 것이라고 생각합니다. 저는 지금까지 빠르기에만 집착했습니다.몇살까지는 뭘 해야하고, 그 이후 언제까지는 무엇을 달성해야하고..하지만 최근의 AI 발전을 보면서 이런 것들이 더 이상 무의미하다는 생..

볕뉘 생각 2025.04.12

[편입후기] 실패와 성공에 대한 이야기

약 1년만의 포스팅입니다.   그동안 군복무를 하였고 최근 전역하였습니다.운좋게 정말 좋은 사람들을 많이 만나 좋은 인연도 쌓고 잘 지내다 온 것 같습니다. 물론 힘든 부분도 많았는데, 그 중 가장 컸던 것은 멈춰있다는 압박감이었습니다.저는 성장없이 정체되어 있는 삶을 못견디는 성격입니다.이러한 이유로 군대는 제게 육체적인 부분보다 정신적인 스트레스를 많이 주는 곳이었습니다. 그래서 제한된 군 생활 중 발전할 수 있는 방법을 찾았고 그렇게 시작하게 된게 편입 공부였습니다.편입공부는 크게 편입수학과 편입영어, 두 과목으로 나뉘는데 두 공부 모두 편입 시험 결과와 관계없이 제 성장에 도움이 될 것이라 생각하여 시작하게 되었습니다.   특히 영어는 제 약점이었던지라 이를 보완하기 위해 많이 노력했던 것 같습니..

볕뉘 생각 2025.02.17

[React/Firebase] 소상공인 카페 쿠폰 및 고객 관리 프로그램 외주 경험 기록

개요몇 개월 전 진행한 외주에 대한 경험을 기록해두고자 한다. 외주를 부탁한 곳은 소상공인이 운영하는 개인 카페였다. 해당 카페에서는 고객 프로모션 마케팅으로 쿠폰을 발행하고 있었는 데, 11번 주문하면 1회 무료 음료를 제공하는 식이었다.문제는 고객의 수가 늘어나면서 고객의 정보를 찾기 어려워졌다는 것이다.이곳은 아마스빈처럼 고객이 쿠폰을 소지하게 하는 것이 아니라 매장에서 직접 쿠폰을 보관하고 관리하는 방식이었는데 고객의 수가 1000명 가까이 되다보니 주문 시 금방금방 찾아 쿠폰을 적립해주기 어려워졌고 특히 동명이인의 경우 어떤 정보가 해당 고객의 정보인지 파악하기 어려워졌다. 요구사항 파악 후, 디자이너와 함께 클라이언트의 요구사항에 맞춰 디자인 및 개발까지 완제품으로 프로그램을 만들어주었다.  ..

Experience/외주 2023.11.13

[Python/파이썬] 백준 알고리즘 2206번 - 벽 부수고 이동하기 (BFS)

처음에는 백트래킹으로 접근하려고 했다. """ 1. 아이디어 - 백트래킹으로 탐색하며 벽을 뚫을 때와 안뚫을 떄를 구분하여 전체 가지수를 탐색한다. 2. 시간 복잡도 - O(N * M) : 1000 * 1000 = 1,000,000 -> 가능 3. 변수 - N, M : int - map : int[][] - visit : bool[][] """ import sys sys.setrecursionlimit(10 ** 6) INF = sys.maxsize input = sys.stdin.readline N, M = map(int, input().split()) map = [list(map(int, input().rstrip())) for _ in range(N)] visit = [[False] * M for ..

[Python/파이썬] 백준 알고리즘 1956번 - 운동 (변형된 다익스트라/Dijkstra) (feat. 플로이드)

처음에는 플로이드로 풀었다. """ 1. 아이디어 - 플로이드로 전체 마을 사이의 최단 경로를 구한다. - 이중 for문으로 도로의 길이의 합이 가장 작은 사이클을 찾는다. 2. 시간 복잡도 - O(V^3 + V^2) : 400 ^ 3 ~= 6억 3. 변수 - V, E : int - dist : int[][] - min_dist : int """ import sys INF = sys.maxsize input = sys.stdin.readline V, E = map(int, input().split()) dist = [[INF] * (V + 1) for _ in range(V + 1)] for l in range(1, V + 1): dist[l][l] = 0 for _ in range(E): a, b, c..

[Python/파이썬] 백준 알고리즘 14889번 - 스타트와 링크 (백트래킹/Backtracking)

최초의 풀이는 조금 복잡하게 접근하였다. """ 1. 아이디어 - 백트래킹으로 전수를 조사한다. - for문을 돌릴 때 마지막으로 선택한 선수보다 높은 번호의 선수들을 대상으로 한다. - 전체를 대상으로 돌리는게 아니라 N/2만큼 돌린다. (대칭이므로) - 깊이가 N/2에 도달하면 선택한 팀 구성을 대상으로 각각 팀의 능력치를 구한다. - 비교하여 현재 갖고 있는 최소값보다 작으면 교체한다. 2. 시간 복잡도 - NCN/2 * (N ** 2) = (N! / ((N - N/2)! * (N/2)!)) * (N/2 ** 2) ~= 70,000,000 -> 가능 3. 변수 - N : int - S : int[][] - 선택한 팀원 리스트 : int[] - 능력치 차이 최소값 : int """ import sys..

[Python/파이썬] 백준 알고리즘 11657번 - 타임머신 (벨만 포드 알고리즘/Bellman-Ford)

""" 1. 아이디어 - 1번 도시에서 출발해서 나머지 도시로 가는 가장 빠른 시간 -> 다익스트라 2. 시간 복잡도 - O(ElgV) : 6000 * lg(500) ~= 16000 -> 가능 3. 변수 - N, M : int - 인접 리스트 : (이동 시간, 도착 도시)[][] - 최단 거리 배열 : int[] - 갈 수 있는 도시들 : heap """ import sys import heapq INF = sys.maxsize input = sys.stdin.readline N, M = map(int, input().split()) edge = [[] for _ in range(N + 1)] for _ in range(M): A, B, C = map(int, input().split()) edge[A]..

[Python/파이썬] 백준 알고리즘 11053번 - 가장 긴 증가하는 부분 수열 (DP)

사실 이 문제를 볼 때 부분 수열을 만들 때 기존 수열의 순서를 그대로 따라야하는지가 헷갈렸다. 하지만 그렇다면 그냥 set으로 중복을 제거하고 수를 구하면 될 것이다... 그래서 아마 이것은 아니겠지 하고 풀었다. 처음에는 완전 탐색으로 풀 생각을 했다.. """ 1. 아이디어 - 가장 작은 수 하나를 구한다 - 이후 뒤 수열을 for문으로 돌며 큰 수를 찾는다. 2. 시간 복잡도 - 두개의 포인터 : O(N) - 전체 조회 : O(N^2) = 1,000,000 -> 가능 3. 변수 - N : int - A : int[] """ import sys input = sys.stdin.readline N = int(input()) A = list(map(int, input().split())) max_len..

[Python/파이썬] 백준 알고리즘 1504번 - 특정한 최단 경로 (다익스트라/Dijkstra)

""" 1. 아이디어 - 우선 반드시 지나야 하는 두 정점 사이의 최소 거리를 구한다. (다익스트라) - 그리고 1번 정점과 v1, v2 / N번 정점과 v1, v2 사이의 거리를 구한 뒤 더 짧은 거리를 선택한다. 2. 시간 복잡도 - O(3 * ElgV) = 5 * 200000 * lg(800) =~ 2,903,089 -> 가능 3. 변수 - 정점의 개수, 간선의 개수 : int - 힙 : (비용, 노드번호) - 거리배열 : int[] - 인접 간선 리스트 : (비용, 노드번호)[] """ import sys import heapq INF = sys.maxsize input = sys.stdin.readline N, E = map(int, input().split()) edge = [[] for _ ..

[NginX] NginX 502 Error 문제 해결

잘 실행되던 서비스가 다운되는 일이 생겼다... Github Action 에서 수동으로 재배포해주면 해결되긴 하였는데, 다운되는 일이 최근 잦아졌다. 백엔드 엔드포인트 url로 접속하면 위와 같이 502 에러가 떴다. (필자는 CloudFlare를 앞에 붙여둬 CloudFlare의 에러화면이 뜬다.) 아무리 개인 프로젝트라해도 적지 않은 사람들이 사용하는 서비스인데 문제가 있다 판단하였고 바로 해결을 시도하였다. 하지만 생각보다 문제 원인을 찾기가 쉽지않았다. 구글링, 개발관련 오픈톡방, ChatGPT, 지인 등을 총동원해 원인을 분석해보았다. 먼저 CloudFlare에서 문제가 발생한게 아닐지 확인해보았다. 하지만 이전에 문제 발생 시, 재배포해주면 해결되었기에 이는 CloudFlare의 문제보다는 A..

반응형