문제 문제 풀이 세션을 관리하 듯이 하는 문제라서 생각보다 접근하기는 쉬었다. 일단 map을 두개를 이용해서 id 하나의 공통된 String key 값을 주고 한쪽은 enter와 leave를 관리하고 한쪽은 change에 따른 닉네임만 관리 해주면 되는 문제이다. 나의 답안 public static String[] solution(String[] record) { ArrayList answer = new ArrayList(); Map user = new HashMap(); LinkedList chat = new LinkedList(); for (int i = 0; i < record.length; i++) { String[] s = record[i].split(" "); HashMap log = new ..
문제 문제풀이 카카오 문제인데 시물레이션 문제를 내면 엄청나게 시간을 많이 잡아 먹힌다. 일단 차량의 IN과 OUT에 따라 맵에 들어있는 시간을 빼주고 더해줘야 한다. 그렇게 다 정리가 되면 아직 출차 되지 않은 차량은 23:59 분 기준으로 또 값을 변경해줘야 한다. 이후 들어 있는 시간으로 기본시간을 초과한 경우 기본값 + 추가요금을 내게 하고 기본시간을 초과하지 못한 경우 기본 값만 내게 계산을 해서 배열에 담은 후 반환해주면 된다. 나의 답안 public static int[] solution(int[] fees, String[] records) { ArrayList answer = new ArrayList(); LinkedList parking = new LinkedList(); Map cars..
알고리즘 복잡도 알고리즘 복잡도는 시간 복잡도와 공간 복잡도 두 개로 구분이 된다. # 시간 복잡도 시간 복잡도는 알고리즘의 입력 데이터에 대해 수행하는 연산 횟수의 총합을 나타내며, 대개는 입력 데이터의 크기에 대한 함수로 나타난다. 이 함수를 T(n)으료 표현할 때, 알고리즘의 시간 복잡도는 O(T(n))과 같이 표현이 된다. 여기서 O는 최악의 경우의 복잡도를 나타내는 빅오 표기법이다. 빅오 외 표기법 빅 오메가 (Big Omega) 표기법 : Ω(n) 빅 오메가 표기법은 최악의 경우를 나타내는 빅오 표기법과 달리, 최선의 경우를 나타낸다. 즉, 알고리즘의 실행 시간이 최소한 이 정도 이상이라는 것을 나타낸다. 빅세타 (Big Theta) 표기법 : Θ(n) 빅세타 표기법은 빅오 표기법과 빅 오메가..
최단 경로 알고리즘 최단 경로 알고리즘은 두 개의 정점 사이의 가장 짧은 경로를 찾는 알고리즘이다. 이 알고리즘은 그래프의 가중치를 이용하여 경로를 선택하며, 가중치는 간선에 할달된 비용을 의미한다. 그래프에서 가장 짧은 경로를 찾는 것은 네트워크 라우팅, GPS 네비게이션, 물류 최적화 증 다양한 분야에서 활용 된다. 가장 대표적인 최단 경로 알고리즘으로는 다익스트라, 벨만-포드, 플로이드-워셜 알고리즘이 있다. # 다익스트라(Dijkstra) 출발점에서 목표점까지의 최단 경로를 구하는 알고리즘을 말한다. 한 노드에서 다른 모든 노드로의 최단 경로를 구하는 데 사용한다. 간선에 음의 가중치가 없어야 한다. 그리디 + DP 형태를 가지고 있다. 알고리즘 복잡도 : O(ElogN) E: 간선, N:노드 순..
문제 문제 준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) 출력 첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다. 문제 풀이 역시 많은 문제를 풀어본 경험 때문인지 이러한 문제들은 쉽게 접근이 가능했다. 큰 동전부터 나머지로 계산을 해서 나온 나머지 값들을 계속 동전 개수에 더..
문제 문제 N×N 게임판에 수가 적혀져 있다. 이 게임의 목표는 가장 왼쪽 위 칸에서 가장 오른쪽 아래 칸으로 규칙에 맞게 점프를 해서 가는 것이다.각 칸에 적혀있는 수는 현재 칸에서 갈 수 있는 거리를 의미한다. 반드시 오른쪽이나 아래쪽으로만 이동해야 한다. 0은 더 이상 진행을 막는 종착점이며, 항상 현재 칸에 적혀있는 수만큼 오른쪽이나 아래로 가야 한다. 한 번 점프를 할 때, 방향을 바꾸면 안 된다. 즉, 한 칸에서 오른쪽으로 점프를 하거나, 아래로 점프를 하는 두 경우만 존재한다.가장 왼쪽 위 칸에서 가장 오른쪽 아래 칸으로 규칙에 맞게 이동할 수 있는 경로의 개수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 게임 판의 크기 N (4 ≤ N ≤ 100)이 주어진다. 그 다음 N개 줄에는 각 ..