ALGORITHM 100

[백준] 2003 수들의 합2 java

https://www.acmicpc.net/problem/2003 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net 투 포인터 알고리즘 리스트에서 두 개의 포인터를 이용해 순차적으로 접근합니다. 1. 첫 번째 원소와 마지막 원소에서 시작하는 경우 2. 둘 다 첫 번째 원소에서 시작하는 경우 문제 풀이 : 투 포인터에서, 2. 둘 다 첫 번째 원소에서 시작하는 경우를 사용하였습니다. start = 0, end = 0 으로 시작합니다. 투 포인터는 start

[백준] 구간 합 구하기 4 java

https://www.acmicpc.net/problem/11659 11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net 1 ≤ N ≤ 100,000 1 ≤ M ≤ 100,000 1 ≤ i ≤ j ≤ N 이므로 시간복잡도 O(N)이 되어야합니다. 문제 풀이 : N배열이 5 4 3 2 1일 때, 배열의 합들을 누적해서 0 5 9 12 14 15 로 만들어줍니다. i번째 수부터 j번째 수까지 합은 arr[j] - arr[i-1]이 됩니다. import java.util.Scanner; public..

[프로그래머스] 게임 맵 최단거리 java

https://programmers.co.kr/learn/courses/30/lessons/1844 코딩테스트 연습 - 게임 맵 최단거리 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1 programmers.co.kr 문제 풀이 : 최단 거리를 구해야하기 때문에 BFS를 사용했습니다. class Pair에 count 변수로 지나가는 칸의 개수의 최솟값을 넣어주었습니다. BFS를 돌면서 좌표가 팀 진영에 도착했을 때는 count를 return 해줍니다. 도착하지 못했을 때에는 -1을 return 해줍니다. import jav..

[프로그래머스] 폰켓몬 java

https://programmers.co.kr/learn/courses/30/lessons/1845 코딩테스트 연습 - 폰켓몬 당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. programmers.co.kr import java.util.*; class Solution { public int solution(int[] nums) { HashSet hs = new HashSet(); for(int i = 0; inums.length/2) return nums.length/2; return hs.size(); } }

[프로그래머스] 로또의 최고 순위와 최저 순위 java

https://programmers.co.kr/learn/courses/30/lessons/77484 코딩테스트 연습 - 로또의 최고 순위와 최저 순위 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호 programmers.co.kr 문제 풀이 : score 배열에 당첨 내용을 넣고 인덱스를 이용해 순위를 출력하였습니다. min 변수는 lottos 배열과 win_nums 배열에서 일치하는 번호 갯수로, 로또 순위의 최저 순위가 됩니다. zero_count 변수는 0의 갯수로, 로또 번호를 바꿀 수 있는 갯수입니다. 따라서 min+zero_coun..

[프로그래머스] 소수 찾기 java

https://programmers.co.kr/learn/courses/30/lessons/42839 코딩테스트 연습 - 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 programmers.co.kr 문제 설명 : 종이 조각에 적힌 숫자로 만들 수 있는 소수가 몇 개인지 세기 문제 풀이 : 숫자를 조합하기 위해서 순열을 이용하였습니다. 순열로 뽑은 숫자가 소수인지 아닌지 판단하여 Set에 넣어주었습니다. Set은 중복이 되지 않는 특징이 있습니다. 그래서 Set 길이가 정답이 됩니다. import java.util.*; import java.u..

[백준] 2493번 탑 java

www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net 문제 풀이: 문제는 자신의 왼쪽에서 가장 가까운 큰 탑의 번호를 출력해야합니다. 먼저 인덱스와 탑의 높이를 저장하기 위한 클래스 Pair를 생성해줍니다. 탑의 높이를 하나씩 입력 받으면서 스택을 이용합니다. 1. 스택이 비어있으면, 탑이 존재하지 않으므로 0을 출력합니다. 그리고 입력받은 인덱스와 탑의 높이를 스택에 삽입합니다. 2. 스택이 비어있지 않으면, 스택이 비어있을 때까지 반복을 합니다. 2.1 스택..

[프로그래머스] 구명보트

programmers.co.kr/learn/courses/30/lessons/42885(%EA%B5%AC%EB%AA%85%EB%B3%B4%ED%8A%B8) 코딩테스트 연습 - 구명보트 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5 programmers.co.kr 문제풀이: 그리디 1. people 배열을 정렬합니다. 2.1 반복문을 돌면서 배열의 가장 큰 원소(i)와 가장 작은 원소(index)를 더해 limit 보다 크면 answer +1을 해줍니다. 2.2 limit보다 작으면 구명 보트를 같이 탈 수 있기 때문에 answer+1을 해주..

[백준] 1795번 암호 만들기 java

www.acmicpc.net/problem/1759 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 문제 풀이 : 백 트래킹을 이용합니다. 주어진 문자 종류 C 가지에서 서로 다른 L개의 알파벳으로 암호를 구하는데 조건을 해결하기 위해서는 1. 문자열을 담은 배열을 정렬 시킵니다. 2. 문자열을 L개 만큼 조합합니다. 3.1 이 때 최소 한 개의 모음과 최소 두개의 자음으로 구성되면 출력해줍니다. 3.2 아니라면 왔던 길을 다시 되돌아가서 새롭게 암호를 조합합니다. import java.util.Arrays; im..

[백준] 18222번 투에-모스 문자열 java

www.acmicpc.net/problem/18222 18222번: 투에-모스 문자열 0과 1로 이루어진 길이가 무한한 문자열 X가 있다. 이 문자열은 다음과 같은 과정으로 만들어진다. X는 맨 처음에 "0"으로 시작한다. X에서 0을 1로, 1을 0으로 뒤바꾼 문자열 X'을 만든다. X의 뒤에 www.acmicpc.net import java.util.*; public class Main { static long[] arr = new long[64]; public static void main(String[] args) { Scanner sc = new Scanner(System.in); long k = sc.nextLong(); //1. 처음 2^n개의 원소가 한번 결정되어 문자열 s를 형성하면, f..