Algorithms 16

[Lv2] 호텔 대실

📌 문제 https://school.programmers.co.kr/learn/courses/30/lessons/155651 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📌 풀이 주어진 문제의 배열을 오름차순으로 정렬한다. 시간의 비교를 숫자로 바꿔서 숫자 비교로 바꾸거나 아니면 LocalTime을 사용해서 Time의 비교를 진행해도 된다. 방의 할당은 PriorityQueue를 사용해서 할당한다. PriorityQueue는 기본형을 사용시 우선순위가 항상 낮은 숫자가 먼저 나오게 된다. 📌 코드 import java.util.*; class Solut..

[Lv2] 뒤에 있는 큰 수 찾기

📌 문제 뒤에 있는 큰 수 찾기 (스택) https://school.programmers.co.kr/learn/courses/30/lessons/154539 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📌 풀이 이 문제는 우선 주어진 제한사항에 따라 이중 for 문이 아닌 다른 방법을 사용해서 정답을 탐색해야 함을 인지해야 합니다 각 자리 수 크기를 비교하기 위해 스택을 사용해야 시간 초과를 방지할 수 있습니다. 자세한 풀이는 코드의 주석으로 대체합니다. 📌 코드 import java.util.*; class Solution { public int[] ..

[12891번] DNA 비밀번호

📌 문제 https://www.acmicpc.net/problem/12891 12891번: DNA 비밀번호 평소에 문자열을 가지고 노는 것을 좋아하는 민호는 DNA 문자열을 알게 되었다. DNA 문자열은 모든 문자열에 등장하는 문자가 {‘A’, ‘C’, ‘G’, ‘T’} 인 문자열을 말한다. 예를 들어 “ACKA” www.acmicpc.net 📌 풀이 해당 문제는 슬라이딩 윈도우를 사용하여 풀이할 수 있습니다. 슬라이딩 알고리즘의 핵심은 마치 창문을 밀듯이 배열을 탐색하면서 이때 추가되는 배열 부분만을 검사하고 탐색범위가 밀리면서 앞 부분 배열값은 삭제하는 것입니다. 이를 통해 시간복잡도를 개선할 수 있습니다. 📌 코드 import java.io.*; import java.util.*; class Ma..

Algorithms/백준 2023.09.21

[1940번] 주몽의 명령

📌 문제 https://www.acmicpc.net/problem/1940 1940번: 주몽 첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고 www.acmicpc.net 📌 풀이 해당 문제는 이중 포인터를 사용하면 해결할 수 있습니다. 문제의 가장 첫 풀이 시작은 주어진 N 개의 숫자 개수가 15,000 개 이므로 정렬 후 문제를 풀 수 있다 입니다. 정렬이 가능하기에 이중 포인터로 M(두 숫자를 합해서 만들어야 하는 숫자)을 구할 수 있습니다. 📌 코드 import java.io.*; import java.util.*; clas..

Algorithms/백준 2023.09.21

Java 에서 입력 값 받아오기

📌 들어가며 백준에서 코딩 테스트를 연습할 땐 한 가지 더 신경써야 하는 부분이 있습니다. 바로 입력값을 받아오는 것인데요..! 프로그래머스의 경우에는 입력값을 따로 받아오지 않아도 제출 하는 과정에서 입력값이 받아지게 되지만 백준의 경우에는 입력값을 받아오는 부분까지 코딩을 직접 해줘야 합니다. 기업마다 코딩테스트를 보는 방식이 달라서 요즘 대부분은 프로그래머스 방식이긴 하지만 이번 기회에 java 에서 입력값을 받아오는 방법을 정리해 보고자 합니다. 📌 Scanner 일반적으로 크지 않은 숫자를 받을 때 사용합니다. import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc = new Sc..

Algorithms/백준 2023.06.12

[프로그래머스][Lv2] 할인행사

📌 문제 [할인행사 - 프로그래머스 lv2] 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📌 풀이 고객이 원하는 장바구니에 대한 map을 생성합니다. 할인점에서 만들 수 있는 장바구니(10일치)를 생성합니다. ✔️number 원소의 합은 10이므로 10일치에 대한 장바구니를 생성합니다. 이 둘을 비교하여 일치한다면 (장바구니를 구성하고 있는 과일과 그 개수) answer 의 값을 증가시켜 줍니다. 📌 코드 import java.util.*; class Solution { private static int answer = 0; public int solu..

[프로그래머스][Lv1][Java] 푸드파이트 대회

📌 문제 푸드파이트 대회 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📌 풀이 레벨 1의 구현 문제라서 그런지 풀이라고 할 만한 것이 딱히 없고 문제에 나온 조건대로 구현하면 쉽게 풀 수 있는 문제였습니다. 다만 바로 떠오르지 않은 문자열 뒤집는 메서드에 대한 공부가 필요할 것 같습니다. 📌 코드 import java.util.*; import java.util.Collections; class Solution { public String solution(int[] food) { String answer = ""; //0, 1, 2, 3 for(int ..

[프로그래머스][Lv2][Java] 폰켓몬

📌 문제 폰켓몬 - Lv2 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📌 풀이 배열의 크기를 구해 고를 수 있는 폰켓몬의 숫자를 구합니다. HashSet을 사용하여 폰켓몬의 종류 번호가 담긴 1차원 배열의 중복값을 제거합니다. 여기서 폰켓몬을 뽑는 경우의 수와는 상관없이(굳이 따지자면 순열 - 순서가 있음) 중복값을 제거한 폰켓몬의 종류에 따라 정답이 정해집니다. ❗️어차피 정답으로 구하는 것은 폰켓몬의 종류❗️ 중복을 제거한 Set 의 크기가 고를 수 있는 폰켓몬의 수보다 크다면 '고를 수 있는 폰켓몬의 수'가 정답입니다. 만약 Set의 크기가 고를..

[프로그래머스][Lv2][Java] 멀리뛰기

📌 문제 멀리뛰기 - Lv2 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📌 풀이 맨 처음에는 2를 나눠서 개수를 늘리는 방식을 생각했습니다... ➡️ 매우 큰 삽질... ❗️그러나 이 문제의 힌트는 멀리뛰기 할 수 있는 칸의 수가 1 또는 2 라는 곳에 있습니다. 멀리뛰기 할 수 있는 칸 수가 정해져 있으므로 총 점프한 거리는 점프하고자 하는 위치에서 1칸 전인 곳과 2칸 전인 곳에서 점프하는 경우로 생각할 수 있습니다.. 따라서 numList[i] = numList[i-1] + numList[i-2] 다음과 같은 점화식이 성립합니다. 📌 코드 cla..

[프로그래머스][Java] 삼총사

📌 문제 프로그래머스 Lv1 - 삼총사 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📌 풀이 처음엔 순서가 없는 조합 문제라고 생각하여 파이썬에서와 같은 조합을 구해주는 라이브러리가 있나 생각했지만 이중 for문으로 구할 수 있는 문제였다. 이중 for문으로 세가지 숫자의 조합을 만들 수 있을 때까지 반복문을 돌린다 이 때 idx 를 선언하여 마지막 숫자는 고정 값으로 넣어준다. 📌 코드 class Solution { public int solution(int[] number) { int answer = 0; //3개의 숫자 그룹을 만들 수 있을때까지만..