본문 바로가기
반응형

알고리즘101

[Programmers] Lv2: 구명보트(42885) 문제- 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42885?language=java 풀이더보기import java.util.*;class Solution { public int solution(int[] people, int limit) { int answer = 0; Arrays.sort(people); int i = 0; int j = people.length - 1; while (i 2025. 2. 12.
[코딩테스트] Java - 백트래킹 백트래킹- 완전탐색: dfs, bfs처럼 데이터를 전부 확인하는 방법- 백트래킹(backtracking): 가능성이 없는 곳에서는 되돌아가고, 가능성이 있는 곳을 탐색하는 알고리즘- 유망함수(promising function): 특정 조건을 정하는 함수 (백트래킹 풀이법)1. 유효한 해의 집합을 정의2. 정의한 집합을 그래프로 표현3. 유망함수 정의4. 백트래킹을 통한 해 탐색 (부분 집합 합)- 부분 집합 합(sum of subset): 1부터 N까지 숫자르 조합했을 때 합이 K가 되는 조합을 찾는 문제- 유망함수1: 현재 조합으로 합이 K일 경우 탐색 중지- 유망함수2: 해당 숫자를 조합하여 합이 K 이상이 되면 탐색 중지 (N-Queen)- N-Queen: 체스의 퀸을 N x N 체스판에 N개 배치.. 2025. 2. 11.
[Programmers] Lv1: 없는 숫자 더하기(86051) 문제- 링크: https://school.programmers.co.kr/learn/courses/30/lessons/86051?language=java 풀이더보기class Solution { public int solution(int[] numbers) { int answer = 0; for (int i = 0; i 2025. 2. 11.
[Programmers] Lv1: 부족한 금액 계산하기(82612) 문제- 링크: https://school.programmers.co.kr/learn/courses/30/lessons/82612?language=java 풀이더보기더보기class Solution { public long solution(int price, int money, int count) { long answer = -1; long change = money; for (int i = 0; i = 0) { answer = 0; } else { answer = -change; } return answer; }} 2025. 2. 11.
[코딩테스트] Java - 동적계획법(Dynamic Programming) 동적계획법- 동적계획법: 작은 부분 문제들을 해결하고 이를 활용하여 전체 문제를 해결하는 방법- 동적계획법의 조건: 최적 부분 구조 + 중복 부분 문제+) 최적 부분 구조: 작은 문제의 해결책의 합으로 큰 문제를 해결할 수 있는 구조+) 중복 부분 문제: 큰 문제를 나누었을 때 작은 문제가 여러 개 반복되는 문제 (동적계획법 풀이법)- 문제를 해결하는 해가 있다고 가정- 종료 조건을 설정- 점화식을 세움 (동적계획법 주요 기법)- 재귀- 반복문: 재귀문 대신 사용- 메모이제이션: 재귀 호출의 횟수를 줄임 (최장 증가 부분 수열)- 부분 수열: 주어진 수열 중 일부를 뽑아 새로 만든 수열. 각각의 원소는 전후 관계를 유지- 최장 증가 부분 수열(Long Increasing Subsequence): 부분 수.. 2025. 2. 11.
[코딩테스트] Java - 탐욕법(Greedy) 탐욕법- 탐욕법(greedy): 문제 해결 과정에서 결정 순간마다 눈앞에 보이는 최선의 선택을 하며 선택을 번복하지 않음. 부분적으로 최적해를 구함- 그리디의 최적해 보장 조건: 최적 부분 구조 + 그리디 선택 속성+) 최적 부분 구조(optimal substructure): 부분해를 푸는 과정이 최적해를 구하는 과정과 일치+) 그리디 선택 속성(greedy selection property): 선택 과정이 다른과정에 영향을 주지 않음 (그리디 풀이법)- 지역의 최적해 구하기- 최적 부분 구조를 만족하는지 확인- 그리디 선택 속성을 만족하는지 확인 (최소 신장 트리)- 신장 트리(spanning tree): 모든 정점이 간선으로 연결되어 있고 간선 개수가 정점 개수보다 하나 적은 그래프- 최소 신장 트리.. 2025. 2. 11.
[코딩테스트] Java - 시뮬레이션 시뮬레이션- 시뮬레이션: 문제에서 주어진 상황을 이해하고 이를 코드로 구현하는 과정. 구현에 중점 (시뮬레이션 풀이법)- 하나의 문제를 여러개로 분리- 예외처리시 독립함수로 구현 (시뮬레이션 주요 기법)- 행렬 연산: 덧셈, 뺄셈, 곱셈- 전치행렬- 좌표 연산: 2차원 행렬 사용. 방향 벡터(offset 사용)- 대칭연산: 좌우대칭, 상하대칭- 회전연산(90도): 시계방향, 반시계방향 예제(배열 뒤집기)- 좌우 뒤집기: A[i][j] = A[i][(N-1)-j]- 상하 뒤집기: A[i][j] = A[(N-1)-i][j] - 입력: arr(2차원 배열)- 출력: 2차원 배열더보기class Solution { private static int[][] solution(int[][] arr, int n) .. 2025. 2. 11.
[Programmers] Lv1: 약수의 개수와 덧셈(77884) 문제- 링크: https://school.programmers.co.kr/learn/courses/30/lessons/77884?language=java 풀이더보기 2025. 2. 11.
[Programmers] Lv1: 로또의 최고 순위와 최저 순위(77484) 문제- 링크: https://school.programmers.co.kr/learn/courses/30/lessons/77484?language=java 풀이더보기class Solution { public int[] solution(int[] lottos, int[] win_nums) { int zero = 0; int matched = 0; for (int l : lottos) { if (l == 0) zero++; else { for (int w : win_nums) { if (l == w) { match.. 2025. 2. 11.
[Programmers] Lv1: 음양 더하기(76501) 문제- 링크: https://school.programmers.co.kr/learn/courses/30/lessons/76501?language=java 풀이더보기class Solution { public int solution(int[] absolutes, boolean[] signs) { int answer = 0; for (int i = 0; i 2025. 2. 11.
반응형