목록분류 전체보기 (167)
코디잉
https://school.programmers.co.kr/learn/courses/30/lessons/42626 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방식) 우선순위 큐 (최소힙) 사용 1) 모든 음식의 스코빌 지수를 우선순위 큐에 넣는다. 그럼 우선순위 큐 첫번째 원소에는 최솟값이 위치하게 된다. 2) 우선순위 큐의 첫번째 원소가 K이상이 될 때까지 반복한다. - 원소가 1개만 있는데 K보다 작으면 -1 반환 - 아니면, 큐에서 poll 해서 연산하고 다시 add해준다. - while() 문 반복한 횟수가 정답이 되므로, 돌 때마다 an..
https://school.programmers.co.kr/learn/courses/30/lessons/12906 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방식) Stack과 Queue 각각 사용해서 풀이 Stack 사용 1) 배열의 0번째 원소는 미리 stack에 넣고, arr[i]와 arr[i - 1] 원소를 비교하며 중복되지 않으면 stack에 push 한다. 2) stack 원소들을 pop해서 후입선출이므로, answer 배열 뒤에서부터 넣어준다. import java.util.*; public class Solution { public..
https://school.programmers.co.kr/learn/courses/30/lessons/178871 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방식) HashMap 사용 1. 순위대로 저장된 players 배열의 선수들의 이름을 HashMap로 넣어준다. 2. 호명된 선수가 저장된 callings 배열을 반복하며, 이전선수의 이름을 알아낸다. 호명된 선수와 그 이전 선수를 사용해서 2-1) players 배열의 순서를 변경해주고 2-2) map의 rank를 갱신해준다. import java.util.*; class Solution..
DB에 있는 모든 user를 불러오기 위해 코드를 작성하고, @RestController @RequestMapping("/api") public class UserApiController { @Autowired private UserRepository userRepository; @GetMapping("/users") List all() { return userRepository.findAll(); } } Postman으로 테스트를 진행하는데 에러가 발생했다. 그래서 웹브라우저에 해당 url을 입력해봤더니, 현재 DB에 User 테이블에는 한 명만 있는데, 그 한 명을 계속해서 조회하다가 결국 StackOverflowError가 발생했다. 찾아보니, jackson으로 직렬화를 할 때 순환참조가 발생해서 ..
https://www.acmicpc.net/problem/1261 1261번: 알고스팟 첫째 줄에 미로의 크기를 나타내는 가로 크기 M, 세로 크기 N (1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 미로의 상태를 나타내는 숫자 0과 1이 주어진다. 0은 빈 방을 의미하고, 1은 벽을 의미 www.acmicpc.net 😂 N, M을 입력받고, 그대로 map = new int[N][M] 으로 설정해서 틀렸었다. map = new int[M][N]으로 설정해야 된다.... 접근 방식) 다익스트라 1. int[][] map을 생성해서 미로를 저장한다. 부숴야하는 벽의 최소 개수를 저장할 int[][] result 배열을 Integer.MAX_VALUE로 초기화한다. 2. map[0][0]을 시작..
https://www.acmicpc.net/problem/16507 16507번: 어두운 건 무서워 첫 번째 줄에는 사진의 크기를 의미하는 정수 R, C (1 ≤ R, C ≤ 1,000)와 사진 일부분의 밝기 평균을 알아볼 개수를 의미하는 정수 Q (1 ≤ Q ≤ 10,000)가 주어진다. 다음 R개의 줄에 걸쳐 R×C 크기의 사 www.acmicpc.net 접근 방식) 누적합 1. int[][] arr 배열 → 행 별로 누적합을 저장한다. 밝기 정보 행별 누적합 ex) 4 1 3 4 9 5 → 4 5 8 12 21 26 1 2 8 7 5 5 1 3 11 18 23 28 : : 2. 입력받은 (r1, c1) (r2, c2) 에 대해 반복문을 돌며 행별로 누적합 구한다. int sum = 0; sum +=..
https://www.acmicpc.net/problem/10282 10282번: 해킹 최흉최악의 해커 yum3이 네트워크 시설의 한 컴퓨터를 해킹했다! 이제 서로에 의존하는 컴퓨터들은 점차 하나둘 전염되기 시작한다. 어떤 컴퓨터 a가 다른 컴퓨터 b에 의존한다면, b가 감염되면 www.acmicpc.net 접근 방식) 다익스트라 1. 도착 정점(감염 컴퓨터)과 가중치(감염 시간) 속성을 갖는 Edge Class 생성 2. 각 정점에 대해 도착정점과 가중치 정보를 저장할 → ArrayList[] list 생성 시작 컴퓨터로부터 모든 컴퓨터 간의 최단 감염 시간을 저장할 → int[] infection 생성 방문 여부를 체크하기 위해 → boolean[] visited 생성 현재 갈 수 있는 노드 중에 가..
https://www.acmicpc.net/problem/21921 21921번: 블로그 첫째 줄에 $X$일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다. 만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출력한다 www.acmicpc.net 접근 방식) 누적합 1. 누적합배열(prefixSum) 생성하고, 방문자 수 입력받으면 바로 누적합 배열에 값 넣어준다. prefixSum[i] = prefixSum[i - 1] + 현재 입력 값 → 이므로, prefixSum = new int[N + 1] 로 만들어준다. 2. X일 동안 방문자 최댓값(max)을 찾고, 배열을 하나 더 만들어서 X일 동안의 누적합을 저장했다.(prefixS..
https://www.acmicpc.net/problem/1916 1916번: 최소비용 구하기 첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 www.acmicpc.net 접근 방식) 다익스트라 1. 도착 정점과 가중치 속성을 갖는 Edge Class 생성 2. 각 정점에 대해 도착정점과 가중치 정보를 저장할 → ArrayList[] list 생성 시작 정점으로부터 모든 노드 간의 최단 거리를 저장할 → int[] distance 생성 방문 여부를 체크하기 위해 → boolean[] visited 생성 현재 갈 수 있는 노드 중에 ..
https://www.acmicpc.net/problem/1753 1753번: 최단경로 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 ≤ K ≤ V)가 www.acmicpc.net ✔ 다익스트라 - 출발 노드와 모든 노드 간의 최단 거리 탐색 - 가중치는 모두 양수 - 시간복잡도: O(ElogV) - 우선순위 큐(heap)을 사용해서 구현한다. - '네비게이션'에 적용되는 알고리즘 접근 방식) 다익스트라 1. 도착 정점과 가중치 정보를 담을 Edge Class를 만든다. 2. 각 정점에 대해 Edge 객체에 대한 정보를 저장하기 위해, ..