문제 풀이과정 문제를 풀기에 앞서, 문제에 주어진 조건을 먼저 살펴보면 단체사진을 찍을 프렌즈는 8명으로 고정되어있음을 알 수 있다. 즉, 만일 무조건 만족할 수 있는 조건만 주어졌다면 최대 8! = 40320 개의 경우의 수가 존재함을 알 수 있다. 조건의 최대 갯수는 100개로 주어졌다. 따라서 모든 가능한 경우의 수를 먼저 계산한 후, 각각의 경우의 수가 조건을 만족하는지를 확인하게 된다면 최대 약 400만 번의 조건 확인 작업을 거치게 될 것임을 알 수 있다. 위의 두 가지 점으로부터 미루어 보아 조건을 생각하지 않고 모든 가능한 경우의 수를 먼저 구한 후, 각각의 경우의 수가 주어진 조건을 모두 만족하는지 검사하여도 크게 시간적으로 무리가 가지 않을것이라 예상하였다. 풀이과정은 아래와 같은 과정..
문제 풀이과정 주어진 사람들의 무게를 정렬한다. 현재 남아있는 사람들 중 가장 무거운 사람(주어진 배열의 가장 뒤쪽 index부터 센다)과 가장 가벼운 사람의 무게(주어진 배열의 가장 앞 index부터 센다)의 합이 무게 제한을 초과하면 가장 무거운 사람이 혼자서 보트를 타야 한다. 배열 뒤에서부터 세는 index 값 1 감소 2번의 계산에서 무게 제한을 초과하지 않을 경우 가장 무거운 사람과 가장 가벼운 사람이 함께 구명 보트에 탑승한다. 배열 뒤에서부터 세는 index 값 1 감소 배열 앞에서부터 세는 index 값 1 증가 무거운 사람의 순서를 나타내는 index 값이 가벼운 사람을 나타내는 index 값보다 큰 동안 2~3번 과정을 반복한다. 반복이 종료되었을 때 두 index가 같다면 마지막 한..
문제 올바른 괄호와 동일한 방식으로 풀이할 수 있는 문제이다. 풀이과정 자료구조 Stack을 이용하여 풀이를 진행한다. 주어진 String을 순회하며 각 char에 대해 다음을 수행한다. stack이 비어있으면 stack에 해당 char를 push한다. stack의 가장 위에 있는 char와 현재 순회중인 char가 서로 다르면 stack에 push한다. 그렇지 않으면 stack에서 pop한다. 최종적으로 stack이 비어있는지 여부를 확인하여 결과를 반환한다. 비어있다면 문자열을 주어진 조건에 맞게 모두 제거할 수 있음을 의미한다. Code import java.util.Stack; class Solution { public int solution(String s) { Stack stack = new ..
로또의 최고 순위와 최저 순위 문제 : 로또의 최고 순위와 최저 순위 풀이과정 로또의 최고 순위는 알아볼 수 있는 번호가 맞은 갯수 + 알아볼 수 없는 번호도 모두 맞을 경우 를 통해 알 수 있다. 로또의 최저 순위는 알아볼 수 없는 번호가 모두 틀렸을 때, 알아볼 수 있는 번호 중 맞은 갯수 를 통해 알 수 있다. 이를 찾기 위해 아래의 과정을 수행한다. 알아볼 수 없는 번호를 모두 제거하고, 알아볼 수 있는 번호만 남긴다. 이 과정에서 알아볼 수 없는 수의 갯수를 알 수 있다. 알아볼 수 있는 번호 중 정답 번호와 일치하는 것들의 갯수를 센다. 위 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 노..
- Total
- Today
- Yesterday
- 코딩테스트
- 탐욕법
- 백준
- dfs
- Queue
- 큐
- Algorithm
- java
- DP
- 연습문제
- Hash
- 데브코스
- BFS
- 그래프
- 멀리 뛰기
- Sorting
- Heap
- 힙
- dynamic programming
- stack
- greedy
- programmers
- 완전탐색
- 자료구조
- 정렬
- 알고리즘
- 동적계획법
- 해시
- 프로그래머스
- 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |