[코딩테스트 합격자 되기(Java)] 문제 50. 계수정렬 구현하기★
·
코딩 테스트 정복기/기타
문제인자로 받은 문자열s를 계수정렬로 정렬하여 반환하는 solution() 함수를 구현하세요. 제약조건• string `s`의 길이는 1 이상 10,000 이하입니다. • `s`는 알파벳 소문자로 이루어져 있습니다.  입출력 예sreturnhelloehlloalgorithmaghilmort  풀이 & 코드계수 정렬 또는 카운팅 소트(counting sort):컴퓨터 과학에서 정렬 알고리즘의 하나로서, 작은 양의 정수들인 키에 따라 객체를 수집하는 것.쉽게 말하자면, 정렬된 어떠한 키에따라 빈도를 저장하는 정렬 알고리즘이다. 시간복잡도는 `O(n)`때문에 키가되는 숫자를 알고있어야 하고, 키의 범위가 너무 크지 않아야한다. 위 문제에서는 a~z를 키로하고, String s에 나오는 문자의 빈도를 계산하면 ..
가비지 컬렉션 (GC; Garbage Collection)
·
Language/Java
Garbage Collection (GC)GC는 JVM에서 메모리 관리를 자동화하는 기능이다.주요 목적은 다음과 같다.메모리 관리 자동화사용하지 않는 객체의 메모리를 자동으로 해제하여 메모리 누수를 방지한다.개발자의 메모리 관리 부담을 줄일 수 있다.안정성 향상잘못된 메모리 해제, 이중 해제 등 메모리 관리와 관련된 버그를 줄일 수 있다.메모리 최적화GC를 통해 메모리를 사용을 최적화하고 메모리 공간을 효율적으로 활용한다.     Heap 메모리 구조 (Young Generation과 Old Generation)GC는 주로 Heap 영역을 대상으로 동작하며, Heap은 Young Generation과 Old Generation으로 나뉜다.Young GenerationEden : 새로 생성된 객체가 할당되..
[백준/Gold V] LCS - 9251
·
코딩 테스트 정복기/백준
[Gold V] LCS - 9251문제 링크분류다이나믹 프로그래밍, 문자열문제 설명LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.입력첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다.출력첫째 줄에 입력으로 주어진 두 문자열의 LCS의 길이를 출력한다. 풀이 및 코드풀이는 아래에 LCS 알고리즘과 함께 정리해두었습니다.[Computer Science/Algorithm] - 최장 공통 부분 수열 (LCS; Longest common subsequ..
최장 공통 부분 수열 (LCS; Longest common subsequence problem) - DP 해결법
·
Computer Science/Algorithm
최장 공통 부분 수열 (LCS; Longest common subsequence problem)부분 수열(subsequence)은 시퀀스의 원소를 순서를 유지한 채 몇 개를 골라낸 것을 말한다.최장 공통 부분 수열은 두 시퀀스(문자열 또는 배열)간 공통된 부분 수열 중 가장 긴 것을 찾아내는 문제이다. 예시) 문자열 `ABCBDAB`와 `BDCABA`의 LCS는 `BCBA`이다. 보통 LCS 문제를 해결하기 위해 주로 동적 계획법(DP;Dynamic Programming)을 사용한다.이 글에서도 DP를 이용한 LCS 알고리즘을 설명하고자 한다.  LCS 길이 구하기동작 원리동적 계획법은 문제를 작은 부분 문제로 나누고 그 해를 이용해서 전체 문제를 해결하는 방식이다.때문에 문제 정의와 점화식, 초기 조건..
Inheritance와 Composition (클래스 간의 관계)
·
Language/Java
Inheritance정의Inheritance(상속)은 객체지향 프로그래밍에서 상위 클래스(부모)의 속성과 메서드를 하위 클래스(자식)가 물려받는 개념이다.`is-a`관계를 나타낸다.  장단점장점재사용성부모 클래스의 기능을 자식 클래스에서 재사용 할 수 있다.계층구조클래스 간 상속관계를 통해 계층 구조를형성할 수 있다.다형성(오버라이딩)자식 클래스에서 부모 클래스의 메서드를 오버라이딩(재정의)하여 다형성을 구현할 수 있다.유지보수 용이공통 기능을 상위 클래스에 두고 관리할 수 있어 유지보수가 쉬워진다. 단점 결합도 증가부모 클래스의 기능을 자식 클래스에서 재사용 할 수 있다.유연성 부족자식 클래스는 부모 클래스에 강하게 의존하게 되어 유연성이 떨어진다.다중 상속 불가Java는 다중 상속을 지원하지 않는다...
[백준/Gold III] 웜홀 - 1865
·
코딩 테스트 정복기/백준
[Gold III] 웜홀 - 1865문제 링크분류벨만–포드, 그래프 이론, 최단 경로문제 설명때는 2020년, 백준이는 월드나라의 한 국민이다. 월드나라에는 N개의 지점이 있고 N개의 지점 사이에는 M개의 도로와 W개의 웜홀이 있다. (단 도로는 방향이 없으며 웜홀은 방향이 있다.) 웜홀은 시작 위치에서 도착 위치로 가는 하나의 경로인데, 특이하게도 도착을 하게 되면 시작을 하였을 때보다 시간이 뒤로 가게 된다. 웜홀 내에서는 시계가 거꾸로 간다고 생각하여도 좋다.시간 여행을 매우 좋아하는 백준이는 한 가지 궁금증에 빠졌다. 한 지점에서 출발을 하여서 시간여행을 하기 시작하여 다시 출발을 하였던 위치로 돌아왔을 때, 출발을 하였을 때보다 시간이 되돌아가 있는 경우가 있는지 없는지 궁금해졌다. 여러분은 백..
벨만-포드 알고리즘(Bellman-Ford Algorithm)
·
Computer Science/Algorithm
벨만-포드 알고리즘이란?벨만-포드 알고리즘(Bellman-Ford Algorithm)은 그래프에서 한 정점에서 다른 모든 정점까지의 최단 경로/최소 비용를 찾는 알고리즘이다.다익스트라 알고리즘과 차별되는 점은 음수 가중치를 처리할 수 있다는 점과 음수 사이클을 탐지할 수 있다는 점이다.때문에, 음수 가중치가 포함된 그래프에서 유용하게 사용된다. 동작 원리벨만-포드 알고리즘은 크게 세가지의 과정을 거친다.1. 초기화시작 정점에서 다른 모든 정점까지의 거리를 무한대로 설정한다.시작 정점의 거리를 0으로 설정한다. 2. 간선 반복모든 간선에 대해 그 간선을 따라 가는 거리가 기존에 기록된 거리보다 짧으면, 해당 거리를 업데이트 한다.이 과정을 그래프에 있는 `정점의 수 - 1`번 반복한다.왜냐하면, 최단 ..
다익스트라 알고리즘 (Dijkstra's Algorithm)
·
Computer Science/Algorithm
다익스트라 알고리즘이란?다익스트라 알고리즘(Dijkstra's Algorithm)은 네덜란드의 컴퓨터 과학자 에츠허르 다익스트라(Edsger Dijkstra)가 고안한 알고리즘으로, 그래프에서 한 노드(정점)에서 다른 모든 노드까지의 최단 경로를 찾는 알고리즘이다. 이 알고리즘은 가중치가 있는 그래프에서 사용되며, 특히 가중치가 음수가 아닌 경우에 유효하다.동작 원리1. 시작 노드 설정시작 노드를 설정하고, 시작 노드에서 다른 모든 노드로의 거리를 무한대로 설정한다. 시작 노드의 거리는 0으로 설정한다.2. 미방문 노드 집합 설정모든 노드를 미방문 노드 집합에 넣는다.3. 최단 거리 노드 선택처음에는 시작노드가 선택되고, 이후에는 미방문 노드 중에서 현재 가장 짧은 거리를 가진 노드를 선택한다.4. 거리..
[프로그래머스/level 2] 양궁대회 - 92342
·
코딩 테스트 정복기/프로그래머스
[level 2] 양궁대회 - 92342문제 링크성능 요약메모리: 78.3 MB, 시간: 0.29 ms구분코딩테스트 연습 > 2022 KAKAO BLIND RECRUITMENT채점결과정확성: 100.0합계: 100.0 / 100.0제출 일자2024년 12월 04일 04:04:42문제 설명문제 설명카카오배 양궁대회가 열렸습니다. 라이언은 저번 카카오배 양궁대회 우승자이고 이번 대회에도 결승전까지 올라왔습니다. 결승전 상대는 어피치입니다. 카카오배 양궁대회 운영위원회는 한 선수의 연속 우승보다는 다양한 선수들이 양궁대회에서 우승하기를 원합니다. 따라서, 양궁대회 운영위원회는 결승전 규칙을 전 대회 우승자인 라이언에게 불리하게 다음과 같이 정했습니다.어피치가 화살 n발을 다 쏜 후에 라이언이 화살 n발을 쏩니..