알고리즘 778

백준 1049번 기타줄 (JAVA)

https://www.acmicpc.net/problem/1049 1049번: 기타줄 첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주 www.acmicpc.net 저는 구현을 통해 문제를 해결하였습니다. 먼저 세트의 최소값과 낱개의 최소값을 구하고, 낱개 6개와 세트의 최소값을 비교하여 낱개쪽이 싸다면 낱개로 n 개를 구매합니다. 반면 세트쪽이 싸다면, 세트로 n개 이상을 구매하는 것이 더 싼지, 세트로 (n/6)개를 사고 나머지를 낱개를 구매하는게 좋은지를 비교하여 결과값을 도출하였습니다. package BOJ.etc; import java.io.Bu..

알고리즘 2023.08.01

백준 1024번 수열의 합 (JAVA)

https://www.acmicpc.net/problem/1024 1024번: 수열의 합 첫째 줄에 N과 L이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이고, L은 2보다 크거나 같고, 100보다 작거나 같은 자연수이다. www.acmicpc.net 저는 투포인트를 이용해 문제를 해결하였습니다. 투 포인트를 통해 두 숫자 사이의 합을 구하고 이 값이 n보다 작다면 뒤 포인트를 늘려 합을 늘리고, 크다면 앞 포인트를 늘려 합을 줄여 나가면서 n과 같아지는 순간을 찾고 그 중 제일 짧은 길이를 구하였습니다. 만약 95%에서 틀렸습니다가 나온다면 입력 1 2 -> 답 0 1 이 나오는지 확인해보시기 바랍니다. package BOJ.twopoint; import java.io.Buffere..

알고리즘 2023.07.31

백준 1010번 다리 놓기 (JAVA)

https://www.acmicpc.net/problem/1010 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net 저는 조합과 DP를 이용해 문제를 해결하였습니다. 저는 강 동쪽의 개수(m)개 중에 강 서쪽(n)개를 뽑으면 된다고 생각했습니다. 이유는 다리는 서로 겹치게 할 수 없기 때문에 순서가 중요하지 않고 m개 중 n개를 뽑아 놓으면 겹치기 않게 하는 경우는 하나이기에 m개 중 n개를 뽑는 경우의 수만 찾으면 된다고 생각했습니다. 이를 조합을 통해 구하였고, 테스트 케이스 마다 조합을 구하기보다 이 값을..

알고리즘 2023.07.30

프로그래머스 이진 변환 반복하기 (JAVA)

https://school.programmers.co.kr/learn/courses/30/lessons/70129 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 저는 구현을 통해 문제를 해결하였습니다. 저는 0을 세는 함수, 0을 제거하는 함수, 길이를 2진법으로 변환하는 함수 이렇게 3가지로 나눠서 구현해 문제를 해결하였습니다. class Solution { private static final String ONE = "1"; public int[] solution(String s) { int removedZeroCnt = 0; int cnt = 0; ..

알고리즘 2023.07.29

백준 1005번 ACM Craft (JAVA)

https://www.acmicpc.net/status?user_id=nodays&problem_id=1005&from_mine=1 채점 현황 www.acmicpc.net 저는 위상정렬을 통해 문제를 해결하였습니다. 위상정렬을 통해 이전에 어떤 작업을 수행해야하고 이 작업을 진행할 수 있는지를 확인하였고, bfs를 통해 각 지점을 방문하면서 목표 지점까지 얼마나 걸리는지를 확인하였습니다. package BOJ.dp; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.Strin..

알고리즘 2023.07.28

프로그래머스 상담원 인원 (JAVA)

https://school.programmers.co.kr/learn/courses/30/lessons/214288 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 저는 우선순위 큐를 통해 문제를 해결하였습니다. 먼저 각각의 k개에 인원을 배치 후, 각 type에 맞게 우선순위 큐에 넣었습니다. 이 사이즈가 각 배치한 인원들 보다 크다면 우선순위 큐에서 한명 빼고 다음 사람을 넣어줍니다. 이때 넣어질 사람의 시작 시간보다 나올 사람의 끝나는 시간이 더 빠르다면, 그 차이만큼 결과값에 더해줍니다. import java.util.*; class Solution..

알고리즘 2023.07.27

백준 10472번 십자뒤집기 (JAVA)

https://www.acmicpc.net/problem/10472 10472번: 십자뒤집기 당신에게 3x3 크기의 보드가 주어진다. 각각의 칸은 처음에 흰색 혹은 검은색이다. 만약 당신이 어떤 칸을 클릭한다면 당신이 클릭한 칸과 그 칸에 인접한 동서남북 네 칸이 (존재한다면) 검은색 www.acmicpc.net 저는 dfs를 통해 문제를 해결하였습니다. 각 지점을 한번 눌러보면서 모두 흰색이 되는 최소의 값을 찾았습니다. package BOJ.bfs; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.function.Function; public class VOJ_10472 { private static f..

알고리즘 2023.07.26

백준 2156번 포도주 시식 (JAVA)

https://www.acmicpc.net/problem/2156 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규 www.acmicpc.net 저는 DP를 이용하여 문제를 해결하였습니다. 저는 이전에 몇 개의 포도주를 연속으로 먹었고 그에 해당되는 값에서 최대값이 몇인지를 DP에 저장하여 문제를 해결하였습니다. package BOJ.dp; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; import java.util.functi..

알고리즘 2023.07.25

백준 2304번 창고 다각형 (JAVA)

https://www.acmicpc.net/problem/2304 2304번: 창고 다각형 첫 줄에는 기둥의 개수를 나타내는 정수 N이 주어진다. N은 1 이상 1,000 이하이다. 그 다음 N 개의 줄에는 각 줄에 각 기둥의 왼쪽 면의 위치를 나타내는 정수 L과 높이를 나타내는 정수 H가 한 개의 www.acmicpc.net 저는 스택 개념을 이용해 문제를 해결하였습니다. 저는 왼쪽, 오른쪽에서 각각 진행하며, 만약 이전의 높이보다 크다면 결과값에 너비 * 이전 높이를 더해주었습니다. 그렇게 되면 제일 높은 값의 지붕 값은 고려되지 않습니다. 그래서 왼쪽 오른쪽에서 진행하면서 마지막의 인덱스를 저장해 놓고 그 사이 값 * 해당 높이를 결과값에 더해주어 문제를 해결하였습니다. package BOJ.etc..

알고리즘 2023.07.24

프로그래머스 단어 변환2(JAVA)

https://school.programmers.co.kr/learn/courses/30/lessons/43163 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 저는 bfs를 통해 문제를 해결하였습니다. 현재 단어에서 words에 있는 단어를 확인하고 현재 단어와 한 단어만 차이나면 bfs에 넣어 문제를 해결하였습니다. import java.util.*; class Solution { public int solution(String begin, String target, String[] words) { Set set = new HashSet(); for(..

알고리즘 2023.07.23