분류 전체보기 152

[Spring/Springboot] 스프링 bean과 등록 방법

목차 이 글은 Notion에서 작성 후 재편집한 포스트입니다. 서론 스프링 컨테이너 내부에서 서로 어떤 역할을 하는지는 대부분의 @어노테이션으로 해결이 가능합니다. 대표적으로 MVC모델에선 @Controller, @Service, @Repository 등의 어노테이션이 각각 컨트롤러, 서비스, 레파지토리를 나타내는 것으로 사용됩니다. 본 포스트에선 스프링 bean을 어떻게 등록하는지와 그 원리에 대해 알아보도록 하겠습니다. 김영한님의 인프런 스프링 강의 내용을 정리한 내용입니다. 참고 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8..

[JAVA] 자바의 직렬화(Serialization)

목차 이 글은 Notion에서 작성 후 재편집한 포스트입니다. 개요 자바 시스템에서, 각자 PC의 OS마다 서로 다른 가상 메모리 주소 공간을 사용하기 때문에, 이들끼리 통신하기 위해선 직렬화 라는 작업을 진행해야 합니다. 본 포스팅에선 직렬화란 어떤건지, 어떤 방식으로 이루어지는지, 어떤 상황에서 필요한지, 장단점과 유의점에 대해 알아보도록 하겠습니다. 참고 https://parkadd.tistory.com/134 [Java]자바 직렬화 (Serialization) 모든 예시 코드는 이곳에서 볼 수 있습니다. 자바 직렬화는 다음의 고민을 해결하는데 사용할 수 있다. 자바 객체를 컴퓨터에 저장했다가 다음에 다시 자바 객체로 변환할 수 없을까? 네트워크 parkadd.tistory.com https://g..

[Python] Leetcode 134. Gas station

목차 문제 https://leetcode.com/problems/gas-station/ Gas Station - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 설계&풀이 정말 간만에 머리를 앓았던 문제라서 포스팅한다. 코테에서 자주 보이던 그리디 문제인데, 처음엔 완탐으로 했다가 시간초과가 났다. # 시간초과 풀이... # 한바퀴 만큼 순회 n = len(gas) if n == 1: if gas[0] >= cost[0]: return 0 else: -1 for ..

[Python] 백준 온라인 저지 18870 좌표 압축

목차 문제 https://www.acmicpc.net/problem/18870 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌 www.acmicpc.net 설계&풀이 좌표 압축이란, 주어진 좌표를 크기순으로 정렬하는 행위를 말한다. 예를들어 다음과 같은 리스트(좌표) 가 주어졌다고 가정하면.. tempList = [1, 3, 4, 2, 4] # 좌표압축 실행 후 print(tempList) # 결과 ''' [0, 2, 3, 1, 2] ''' 이런식으로, 오름차순 정렬 기준으로 1은 0번째 ..

[Python] 백준 온라인 저지 17609 회문

목차 문제 https://www.acmicpc.net/problem/17609 17609번: 회문 각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다. www.acmicpc.net 설계&풀이 처음엔 별다른 알고리즘을 생각하지 않고 그냥 for문 돌려서 풀려고 했다. 그런데 결과는 시간초과. 뭘까 뭘까.. 생각을 하다가, 투포인터가 생각나서 투포인터로 풀어봤는데, 정답이었다. 처음 코드는 다음과 같다. ''' 1. 일반적인 회문 판단 함수, 정답을 출력하는 함수 두개로 나뉘어서 작업해주자 ''' import sys t = int(input()) # 0, 1, 2중 하나 출력해주는 함수 def p..

[Python] Programmers 더 맵게

목차 문제 https://programmers.co.kr/learn/courses/30/lessons/42626 코딩테스트 연습 - 더 맵게 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같 programmers.co.kr 설계&풀이 이전에 백준에서 풀었던 이중 우선순위 큐에서 힙을 사용했기에, 힙 사용법을 대략적으로 파악하고 있어서 큰 어려움은 없었다. 설계는 다음과 같이 했다. 1. scoville 배열만큼 heap 배열에 담아주고, 해당 배열을 heapq로 힙 형태로 전환시켜준다. heappop() 을 사용하면 가장 왼쪽(0번인덱스) 가 추출됨과 동시에..

[Python] 백준 온라인 저지 2606

목차 문제 https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 설계&풀이 가장 기초적인 DFS/BFS 문제다. 이전에 비슷한 문제를 풀어서인지, 동일한 폼으로 풀 수 있었다. 풀면서 새로 안 사실이 있는데, 파이썬에선 전역변수 설정을 별도로 해줘야 하는 것이었다. dfs와 bfs 함수 안에 cnt로만 해두면 알아서 전역변수로 찾아가는건줄 알았는데, 그게 아니라 global로 선언해줘야 되더라; 몰랐음.. 기초적인 문제다보니 특별한 설명은 필요없을듯 하다..

[Python] 백준 온라인 저지 1764

목차 문제 https://www.acmicpc.net/problem/1764 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. www.acmicpc.net 설계&풀이과정 먼저 시간초과가 난 내 코드다. import sys # 시간초과 풀이 n, m = map(int, input().split()) hPeople = [ sys.stdin.readline().rstrip() for _ in range(n) ] sPeople = [ sys.stdin.readline().rstrip() for _ in range(m) ] answer = [] ..

[알고리즘 이론] 다익스트라(Dijkstra), 최단 경로 알고리즘

목차 이 글은 Notion에서 작성 후 재편집한 포스트입니다. 개요 다익스트라 최단 경로 알고리즘은 그래프에서 여러 개의 노드가 있을 때, 특정한 노드에서 출발하여 다른 노드로 가는 각각의 최단 경로를 구해주는 알고리즘이다 다익스트라 최단 경로 알고리즘은 ‘음의 간선’이 없을 때 정상적으로 동작한다. 음의 간선이란, 0보다 작은 값을 가지는 간선을 의미하는데, 현실 세계의 길(간선)은 음의 간선으로 표현되지 않으므로 다익스트라 알고리즘은 실제로 GPS 소프트웨어의 기본 알고리즘으로 채택되곤 한다. 다익스트라 최단 경로 알고리즘은 기본적으로 그리디 알고리즘으로 분류된다. 매번 ‘가장 비용이 적은 노드’를 선택해서 임의의 과정을 반복하기 때문이다. 참고 https://www.youtube.com/watch?..

[Python] 백준 온라인 저지 1003

목차 문제 https://www.acmicpc.net/problem/1003 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net 설계 및 풀이 DP 문제이다. 사실 문제 유형을 어떻게 알아내는지는 좀 더 문제를 풀어봐야 알 것 같다. 처음엔 재귀로 풀었는데, 재귀로 풀다보니 시간 초과가 되어서 뭘까 고민하다가 결국 답지를 봤는데.. DP더라... 먼저, 재귀로 푼 코드다. cntZero = 0 cntOne = 0 def fibonacci(n): global cntZero global cntOne if n == 0: cntZero += 1 return 0 elif n == 1: cntOne += 1 return..