로또의 최고 순위와 최저 순위 문제 : 로또의 최고 순위와 최저 순위 풀이과정 로또의 최고 순위는 알아볼 수 있는 번호가 맞은 갯수 + 알아볼 수 없는 번호도 모두 맞을 경우 를 통해 알 수 있다. 로또의 최저 순위는 알아볼 수 없는 번호가 모두 틀렸을 때, 알아볼 수 있는 번호 중 맞은 갯수 를 통해 알 수 있다. 이를 찾기 위해 아래의 과정을 수행한다. 알아볼 수 없는 번호를 모두 제거하고, 알아볼 수 있는 번호만 남긴다. 이 과정에서 알아볼 수 없는 수의 갯수를 알 수 있다. 알아볼 수 있는 번호 중 정답 번호와 일치하는 것들의 갯수를 센다. 위 1과 2에서 얻은 결과를 바탕으로 등수를 계산한다. 이 때, 맞은 갯수가 0개 또는 1개일 경우 모두 6등이므로 이 경우에 대한 고려가 필요하다. 여기서는..
문제: https://programmers.co.kr/learn/courses/30/lessons/1829 코딩테스트 연습 - 카카오프렌즈 컬러링북 6 4 [[1, 1, 1, 0], [1, 2, 2, 0], [1, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 3], [0, 0, 0, 3]] [4, 5] programmers.co.kr 풀이과정 전형적인 DFS, BFS 문제라고 생각된다. 문제 풀이는 아래와 같이 진행하였다. (0, 0)부터 시작하여 순차적으로 picture에 속한 모든 원소를 순회한다. 순회 중 임의의 어떤 (i, j)번 째 원소에 대해서, picture[i][j] != 0 이고, visted[i][j] == false 이면 (i, j)번 째 원소는 아직 계산되지 않은 영..
문제 : 소수찾기 - Programmers 풀이과정 Permutation을 이용하여 주어진 숫자 카드들로 만들 수 있는 모든 경우의 수를 구한다. 참고 모든 경우의 수를 계산할 때, 카드를 1장만 사용해서 만드는 경우의 수 부터(맨 앞에서 1자리만) 카드를 n장 사용해서 만드는 경우의 수(맨 앞에서부터 n장)까지 모든 수를 Set에 저장한다. (1 ≤ n ≤ 전체 카드의 수) 2의 결과로부터 Set에는 주어진 카드들로 만들 수 있는 모든 정수가 적혀 있다. 여기서 가장 큰 값을 계산한다. → Collections.max() 3의 결과로 얻은 수에 대해서 에라토스테네스의 체 알고리즘을 사용하여 1부터 해당 수 까지의 소수 테이블을 구한다. 4의 결과로 얻은 테이블을 사용하여 Set에 들어있는 모든 숫자들이..
문제 : 카펫 - 프로그래머스 풀이 간단한 중학교 수학 문제를 코드로 옮겨 풀이하는 문제이다. 주어진 조건 테두리 1줄은 모두 갈색이다. 테두리 1줄을 제외한 중앙부분은 모두 노란색이다. 카펫의 가로 길이는 세로 길이와 같거나 세로 길이보다 길다. 갈색으로 칠해진 격자의 수는 8 이상 5,000 이하인 자연수이다. 노란색으로 칠해진 격자의 수는 1 이상 2,000,000 이하인 자연수이다. 식 세우기 주어진 카펫의 가로길이가 width, 세로길이가 height 라고 했을 때, 갈색으로 칠해진 격자의 수와 노란색으로 칠해진 격자의 수는 각각 다음과 같은 식으로 나타낼 수 있다. brownCount 갈색으로 칠해진 격자의 수 = (width * 2) + (height - 2) * 2 yellowCount 노..
문제 : 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로 바꾸어 주어도 이 문제는 통과할 수 있다. 이를 보면 사용하려는 메서드에 ..
배달 풀이과정 참고 - 다익스트라 알고리즘 각각의 마을에서 다른 마을로의 이동시간을 나타내는 grid를 만든다. 이 때 중간에 다른 마을을 거치는 경우는 고려하지 않는다. 문제에서 주어진 예제 1번의 경우에는 아래의 그림과 같이 표현된다. 문제 조건에 의해 배달을 출발하는 마을은 1번 마을로 고정되어 있으므로 1번 마을에서 출발하여 1번 마을로 도착하는 경우 걸리는 시간을 0으로 설정한다. 1번 마을을 이미 방문했음을 표시한다. 아직 방문하지 않은 마을들 중 현재 마을(최초 시작시에는 1번 마을)에서 최단 시간에 이동할 수 있는 마을로 이동한다. 위의 예시에서는 2번과 4번 마을로 이동이 가능하지만 2번 마을이 소요시간 1로 가장 작으므로 2번 마을로 이동하게 된다. 이동한 마을을 방문했음을 표시한다. ..
- Total
- Today
- Yesterday
- Hash
- 연습문제
- 정렬
- 탐욕법
- 자바
- 코딩테스트
- greedy
- 동적계획법
- 자료구조
- 프로그래머스
- stack
- dynamic programming
- 멀리 뛰기
- 알고리즘
- 데브코스
- 백준
- 큐
- java
- Algorithm
- DP
- 완전탐색
- dfs
- 그래프
- 해시
- BFS
- Queue
- programmers
- Sorting
- 힙
- Heap
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |