방향 그래프가 주어지고 1번 정점에서 각 정점으로 가는 최소 이동 간선수를 구하시오2번 인접리스트 방식 설명n(정점 수), m(간선 수), check 배열(중복 방지), dis배열(최단 경로 수), graph 초기화(ArrayList), Queue(BFS 알고리즘),
자연수로 이뤄진 집합을 두 부분 집합으로 분리하고 각 부분 집합의 합이 서로 같은 경우가 존재할 때, "YES"를 출력, 다를 때 "NO"를 출력하라.int n // (자연수 갯수), int arr\[] // (n개 만큼 자연수 입력), int L // (현재 레벨),
최대 용량 c 값이 주어지고, w의 몸무게를 가진 n마리의 바둑이를 트럭에 태우고 이동해야할 때, 트럭에 태울 수 있는 가장 무거운 값을 구하시오.int n // (자연수 갯수), int arr\[] // (n개 만큼 자연수 입력), int L // (현재 레벨), i
n개의 문제와 제한 시간 m이 주어진다. 각 문제는 점수와 풀이 시간이 주어진다. 제한 시간 m안에 n개의 문제중 최대 점수를 얻을 수 있도록 해야 한다.int n // (문제 갯수), int arr\[]\[] // (n개의 문제), int L // (현재 레벨), i
1번 부터 n까지 번호가 적힌 구슬이 있습니다. 이 중 중복을 허락하여 m번을 뽑아 일렬로 나열하는 방법을 모두 출력한다.여기서 키워드 중복을 허락 , 일렬로 나열에 집중해야 한다. 일렬로 나열은 순열을 의미하고, 중복을 허락함으로써 중복 순열이 되기 때문이다.int
여러 단위의 동전들이 주어져 있을때 거스름돈을 가장 적은 수의 동전으로 교환해주려면 어떻게 주면 되는가?각 단위의 동전은 무한정 쓸 수 있다.첫 번째 줄에는 동전의 종류개수 N(1<=N<=12)이 주어진다. 두 번째 줄에는 N개의 동전의 종류가 주어지고,그
10이하의 N개의 자연수가 주어지면 이 중 M개를 뽑아 일렬로 나열하는 방법을 모두 출력합니다.int n // (자연수 갯수),int m // (뽑기 횟수), int arr\[] // (n개 만큼 자연수 입력), int ch\[] // (백트래킹 배열), int L
n개의 자연수에서 r개를 뽑아 조합할 때 조합의 경우의 수를 구하시오.int n // (자연수 갯수),int r // (뽑을 갯수),int\[]\[] fibo // (메모이제이션할 2차원 배열), DFS() 메서드 // 핵심 로직, 조합의 공식을 이해해야 한다.nCr
가장 윗줄에 1부터 N까지의 숫자가 한 개씩 적혀 있다. 그리고 둘째 줄부터 차례대로 파스칼의 삼각형처럼 위의 두개를 더한 값이 저장되게 된다.예를 들어 N이 4 이고 가장 윗 줄에 3 1 2 4 가 있다고 했을 때, 다음과 같은 삼각형이 그려진다.N과 가장 밑에 있는
7\*7 크기의 미로가 주어지고, 도착 지점인 (7,7) 좌표에 도착하는 모든 경우의 수를 구하라 int dx\[] // (x좌표 기준 동서남북 초기화),int dy\[] // (y좌표 기준 동서남북 초기화),int nx\[] // (내가 이동할 x 좌표),int ny
7\*7 크기의 미로가 주어지고, 도착 지점인 (7,7) 좌표에 도착하는 최단경로의 길이를 구하라 int dx\[] // (x좌표 기준 동서남북 초기화),int dy\[] // (y좌표 기준 동서남북 초기화),int nx\[] // (내가 이동할 x 좌표),int ny
격자 안에 토마토가 주어지는데, 익은 토마토의 동서남북으로 인접한 토마토는 하루만에 익는다.모든 토마토가 익게되는 최소 일수를 구하시오TomatoPoint 클래스 // (Q에 x, y좌표를 담기 위한 객체), Queue<new TomatoPoint> // (n개
n\*n 크기의 2차원 배열이 주어졌을 때,0은 바다 1은 섬을 의미한다.섬은 상하좌우와 대각선으로 연결되어있다.2차원 배열 내에서 섬 갯수를 구하시오아래 그림의 섬 갯수는 5개이다.int n // (2차원 배열 크기 변수), int arr\[]\[] // (n\*n
n\*n 크기의 격자판이 있다.집은 1, 피자집은 2, 거리는 0으로 표시될 때피자집과 집의 거리 즉, 피자 배달 거리는|x1-x2| + |y1-y2|이다.경제가 좋지 않아 전체 피자집에서 m개의 피자집만 살리고 나머지 피자집은 폐업하려고 한다.m개의 피자집을 살렸을
회의는 시작 시간과 종료 시간이 주어진다.가장 많이 회의를 배정받게 되는 수를 구하라.조건(시작 시간 <= 종료 시간)//예시 입력51 42 33 54 65 7// 출력 3(2,3), (3,5), (5,7) 세개의 회의를 배정받는 것이 가장 많은 회의를 배정받게
greedy 알고리즘 감각이 많이 부족하다.최대 수입 스케줄을 풀면서 부족했던 점을 되짚어 보고 개선해보자.문제에서 하루에 하나의 일만 선택할 수 있다는 조건이 있다.이 조건의 예시를 들어보면50 240 230 120 1위와 같이 스케줄이 주어졌을 때 date = 1에
생각의 흐름을 글로 적어나가다 보면 어느 부분에 구멍이 있는지 찾게되는 경우가 잦다.주석으로 생각의 흐름을 적어나가면서 코드를 작성해나가면 논리적으로 문제를 해결하는 실력이 향상될 수 있다.고민한 내용을 글로 적을 때 메모장을 이용하면 좋다. 하지만, 코딩테스트를 볼
다익스트라 알고리즘 문제 해결 과정과,처음으로 주석을 적극적으로 사용해서 문제를 해결해보는 과정에서 미숙했던부분을 기록해보고, 어떻게 개선해나갈지 생각해본다.
'친구인가?' 문제의 핵심을 파악하고 문제를 풀면서 풀이 방법을 정리해본다.
처음으로 최소 스패닝 트리 문제를 풀어보면서 풀이 방법과 배운점을 기록한다.
그래프 문제를 풀 때 인접행렬이 사용될 수 있다.인접행렬이 무엇이고, 어떨 때 사용할 수 있는지 정리해보려한다
그래프 문제를 해결할 때 인접리스트를 사용하게 되는 경우가 잦다. 그런데 나는 인접리스트의 개념을 명확하게 알고있을까?그래서, 따로 정리해보기로 했다.
알고리즘 풀이 프로세스를 진화시키는 과정을 버전별로 정리한다.
다이나믹 프로그래밍 알고리즘을 배우면서 개념과 패턴, 어떻게 응용될 수 있는지 기록해본다.
알고리즘 문제는 수학 문제를 푸는 것과 비슷하다. 그렇다면 수학 문제는 어떻게 풀이해야할까?저자 G.폴리아의 "어떻게 문제를 풀 것인가"에서 소개하는 문제를 푸는 방법이 무엇인지 알아보고 적용해본다.
알고리즘 최빈값 문제를 풀면서 발생했던 시행착오와 해결 과정을 기록한다
다이나믹 프로그래밍의 개념을 정리해본다.
주어진 jobs 배열에서 시작 시간이 짧은 것 부터 오름차순으로 정렬한다.작업 시간보다 시작 시간이 짧은 디스크가 여러개라면 소요시간이 적은 디스크부터 오름차순한다.