문제 : https://programmers.co.kr/learn/courses/30/lessons/12953 코딩테스트 연습 - N개의 최소공배수 두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배 programmers.co.kr 풀이과정 먼저, 두 정수의 최소공배수를 계산하는 수식을 살펴보면 다음과 같다. 이 식을 통해 두 정수의 GCD를 알면 LCM을 계산할 수 있음을 확인 할 수 있다. 이 때, GCD를 계산하는 방법으로 유클리드 호제법(https://en.wikipedia.org/wiki/Euclidean_algorithm)을 활..
문제 : 링크 풀이과정 1. Map 이용하기 유저의 ID는 시종일관 동일하나 닉네임은 여러 번 변경될 수 있다. 하지만 출력에 필요한 결과는 마지막 닉네임이므로 이 값만 알면 된다. 그러므로 유저가 입장하거나 닉네임 변경을 할 때 마다 ID와 Nickname을 매핑시키고 이를 최종 결과를 구하는데에 사용한다. 2. Queue 이용하기 누가, 어떤 행동을 했는지에 관한 로그는 모두 순차적으로 write, read 된다. 따라서 진행 순서를 지키기에 Queue 를 사용함이 적합하다. 이 때, 처음에는 Queue 가 아니라 List 인터페이스와 LinkedList 구현체를 사용했는데 시간초과가 발생했다. 여기서 인터페이스만 Queue로 바꾸어 주어도 이 문제는 통과할 수 있다. 이를 보면 사용하려는 메서드에 ..
아직 한참 읽고 있는 도중이기는 하지만 Head First Design Patterns 라는 책이 디자인패턴에 대한 설명 뿐만 아니라, 해당 디자인 패턴을 도입하게 되기까지의 시나리오를 유머러스하게 잘 풀어 이야기 해 주어서 빠르고 쉽게 이해하고 받아들일 수 있게 해 주는 것 같다. 아직 읽은 부분보다 읽어야 하는 부분이 산더미 처럼 많은데, 점차 책을 읽어나가면서 현재 글을 쓰면서 부족하게 작성하고 넘어간 부분들은 다시 업데이트 하면서 추후 복습하려고 한다. Strategy Patterns 알고리즘군(群)을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든 디자인 패턴. 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. 알고리즘군(群)을 정의하고 각각을 캡슐화하여 교환해..
Object Object 클래스는 모든 클래스의 최고 조상으로, 모든 인스턴스들이 가져야 할 기본적인 11개의 메서드만을 가지고 있다. toString() 어떤 인스턴스에 대한 정보를 String으로 제공할 목적으로 정의된 메서드이다. Object 클래스에서는 클래스이름@16진수 해시코드 를 반환하도록 구현되어 있다. public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 클래스를 만들면서 원하는 출력 방식이 있다면 toString() 메서드를 적절히 오버라이딩 해 주어야 한다. 그 방식으로는 대체로 인스턴스나 클래스에 대한 정보나 인스턴스 변수들의 값을 문자열로 반환하도록 오버라이딩 ..
StringBuffer 저장하고 있는 문자열을 변경할 수 있는 클래스이다. 내부적으로 문자열 편집을 위한 버퍼를 가지고 있으며, 인스턴스를 생성할 때 그 크기를 직접 지정해 줄 수도 있다. default size는 16으로 설정되어 있다. 편집 중인 문자열의 길이가 버퍼의 길이를 초과하면 버퍼의 길이를 늘려주는 작업이 추가로 수행되어야 한다 → 효율성 하락 인스턴스 생성시에 버퍼로 사용하기 위한 char형 array가 생성되는 것으로 알고 있었는데, 실제 코드를 열어 보면 byte array 타입으로 멤버변수가 선언되어 있다. 내부 코드를 조금 살펴보면 문자열이 UTF-16과 LATIN1 방식 두 가지 인코딩 방식으로 존재할 수 있기 때문에 이를 모두 지원하기 위한 방법인 것으로 생각된다. 그래서 인스턴..
기본적으로 homebrew가 설치되어 있는 상태여야 한다. homebrew 가 openjdk의 repository까지 탐색할 수 있도록 추가 brew tap adoptopenjdk/openjdk 다운로드 가능한 Java 버전 확인하기 원하는 버전 인스톨 하기 13버전을 설치할 경우 다음과 같다. brew install adoptopenjdk13 버전 이름을 바꿔가며 계속 설치하면 여러 버전의 자바를 설치할 수 있다. brew install adoptopenjdk11 brew install adoptopenjdk13 brew install adoptopenjdk15 mac에 설치된 자바 경로를 확인하고 싶을 경우 터미널에 다음을 입력한다. /usr/libexec/java_home -V Java 경로 설정 ..
배달 풀이과정 참고 - 다익스트라 알고리즘 각각의 마을에서 다른 마을로의 이동시간을 나타내는 grid를 만든다. 이 때 중간에 다른 마을을 거치는 경우는 고려하지 않는다. 문제에서 주어진 예제 1번의 경우에는 아래의 그림과 같이 표현된다. 문제 조건에 의해 배달을 출발하는 마을은 1번 마을로 고정되어 있으므로 1번 마을에서 출발하여 1번 마을로 도착하는 경우 걸리는 시간을 0으로 설정한다. 1번 마을을 이미 방문했음을 표시한다. 아직 방문하지 않은 마을들 중 현재 마을(최초 시작시에는 1번 마을)에서 최단 시간에 이동할 수 있는 마을로 이동한다. 위의 예시에서는 2번과 4번 마을로 이동이 가능하지만 2번 마을이 소요시간 1로 가장 작으므로 2번 마을로 이동하게 된다. 이동한 마을을 방문했음을 표시한다. ..
- Total
- Today
- Yesterday
- dfs
- 코딩테스트
- 연습문제
- 백준
- 정렬
- 자료구조
- 힙
- 탐욕법
- programmers
- greedy
- dynamic programming
- Sorting
- 프로그래머스
- 큐
- 완전탐색
- stack
- 동적계획법
- DP
- 알고리즘
- 해시
- java
- 그래프
- 데브코스
- 멀리 뛰기
- BFS
- Heap
- 자바
- Queue
- Algorithm
- Hash
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |