본문 바로가기

PS831

[자바] 백준 14625 - 냉동식품 (boj java) 문제 : boj14625 시작시간부터 종료시간까지 각 분마다 어떠한 숫자들이 표시될지만 잘 판단할 수 있다면 풀 수 있다. 함수를 나눠보자. 필요한건 결국 1. 시작시간부터 시작해서 종료시간까지 1분씩 잘 더해줄 수 있는 함수 2. '1'의 각 시간에서 N이 포함되어 있는지 판단해주는 함수 위의 두 개만 있으면 된다. 문자로 해도 상관없지만, 내 경우엔 숫자로 처리했다. '1'에 해당하는 부분이 plusMin, '2'에 해당하는게 canSee 이다. 찾는 방법은 코드를 참고해보자. 주의점은 HHMM 형태이므로, int로 나타냈을 때 1000이하의 수라면, 예를들어서 5시 34분이라면 534라고 표현될 것이다. 실제론 맨 앞에 0이 있다고 봐야 하므로 N이 0일 경우 1000 이하의 수라면 0이 항상 존재.. 2022. 6. 25.
[자바] 백준 12034 - 김인천씨의 식료품가게 (Large) (boj java) 문제 : boj12034 정상가와, 정상가의 75%인 할인가가 n 쌍 존재한다. 그리고 문제 조건으로 '정답은 단 하나만 존재하는것이 보장되어 있음'라고 했으므로 정답을 찾으려면 단순히 생각해서 모든 경우를 살펴봐서 그 중 모든 정상가-할인가 쌍이 맞아떨어지는 경우를 찾으면 될 것이다. 하지만 잘 생각해보면 결국 할인가는 정상가보다 언제나 클 것이다. 따라서 주어진 값들 중 가장 큰 값은 할인가가 될 수 없으며 무조건 정상가이다. 따라서, 큰 값부터 정상가로 생각해 할인가를 찾아나갈 경우, 매번 남은 값들 중 가장 큰 값은 정상가일 수 밖에 없다. 정리하자면 오름차순으로 입력이 들어오므로, 마지막 값부터 시작해서 점차적으로 내려오면서 아직 존재하는 값이라면 무조건 정상가이고, 해당 값과 그 할인가를 제외.. 2022. 6. 23.
[자바] 백준 23037 - 5의 수난 (boj java) 문제 : boj23037 입력으로 들어온 문자를 한 자리씩 숫자로 바꿔주는 부분과 n^5을 리턴해주는 함수를 정의해주면 깔끔하게 풀 수 있다. 입력은 int로 받은 후, 해당 값이 a라면 a%10으로 한자리씩 뽑고 -> a/=10으로 다음 자리로 이동하는 식으로 한 자리씩 수를 얻을 수 있다. 혹은 이하 코드처럼 String으로 받은 후, 각 자리수의 character를 숫자로 변경해줘도 된다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { private int pow5(int n) { return n*n*n*n*n; } private void solution() throws E.. 2022. 6. 22.
[자바] 백준 15688 - 수 정렬하기 5 (boj java) 문제 : boj15688 사실 그냥 배열에 입력받은 후 sort 함수를 사용하고, 순서대로 출력해주기만 하면 되는 간단한 문제이다. 그냥 그렇게 하면 재미없으니 내 경우엔 카운팅 정렬로도 구현해봤다. 당연히 후자가 더 빠르다. 이하 일반적인 sort 함수를 통한 풀이 코드와, 카운팅 정렬 구현을 통한 풀이 코드 모두 첨부해두었다. 코드(일반적인 자바 sort 사용) : github import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; public class Main { StringBuilder sb = new StringBuilder(); private void solution() throws Ex.. 2022. 6. 21.
[자바, C#] 백준 1225 - 이상한 곱셈 (boj java csharp) 문제 : boj1225 우선 최악의 경우는 99999....9(10000자리) 라는 수가 두개 있는 경우이다. 이 때 총 합은 9x9x10000x10000으로 81억이 되므로, 계산의 결과는 int로 표현할 수 없음을 알 수 있다. 따라서 결과 표현은 long으로 해줘야 한다. 또한 입력으로 들어온 A와 B는 10000자리까지 가능하므로 long으로도 당연히 표현이 불가하다. 어차피 각 자리의 수만 알면 되므로 String으로 입력받으면 문제 없다. 즉, A와 B를 String으로 입력받은 뒤 각 자리의 가능한 모든 조합에 대해 character를 숫자로 변환해 곱해서 결과에 더해주는 과정을 코드로 옮겨주면 된다. 예를들어 A=abc, B=de라면(e.g. A가 211 이라면 a=2, b=1, c=1) .. 2022. 6. 21.
[자바] 백준 20053 - 최소, 최대 2 (boj java) 문제 : boj20053 t개의 테이스 케이스를 독립적인 것으로 잘 판단할 수 있게 짜보자. t가 변할 때 다른 변수들이 영향을 받지 않도록 짜면 된다. 그리고 n개를 입력받으면서 매번 최소값과 최대값을 갱신해주는 식으로 짜주면 된다. 이런식으로 들어오는 입력이 알고리즘 문제를 풀 때 많으므로, 로직적인 부분 보다는 입출력 예시라고 생각하고 풀면 될 것 같다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { private void solution() throws Exception { BufferedReader br = n.. 2022. 6. 20.
[자바] 백준 10821 - 정수의 개수 (boj java) 문제 : boj10821 처음엔 문제를 대충읽고, ','를 기준으로 정수와 정수가 아닌 수들이 입력되니 그 중 정수인 것만 세는건줄 알았다. 다시 보니 그냥 ','를 기준으로 몇 개로 나뉘는지만 세면 되므로 코드는 아래와 같다. 문제는 그 전에 한걸로도 맞아야 했는데(Integer.pasreInt에 토큰을 넣으면서 try-catch로 catch에 잡히지 않은 것만 카운팅함.) 걘 틀린걸로보아 그냥 문제 입력이 뭔가 잘못된게 있는 것으로 보인다. 그러니 실제로 정수인지 판단하려 하지말고 ','를 기준으로 몇개의 토큰으로 나뉘는지만 세서 출력해주면 된다. (즉, 문제 입력이 잘못된 문제이다.) 코드 : github import java.io.BufferedReader; import java.io.InputS.. 2022. 6. 19.
[자바] 백준 5656 - 비교 연산자 (boj java) 문제 : boj5656 입력으로 들어온 문자열을 공백을 기준으로 int, String, int로 파싱한다. 중간의 String 부분이 'E' 라면 끝내면 된다. 이외의 경우 중앙의 String 부분에 따라 똑같은 비교연산자를 수행해주면 된다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { private boolean getResult(int a, int b, String op) { switch (op) { case ">": return a>b; case ">=": return a>=b; case " 2022. 6. 18.
[자바] 백준 5704 - 팬그램 (boj java) 문제 : boj5704 각 문자마다 a~z가 모두 있는지 확인하면 된다. 'a'~'z'는 0~25로 표현 가능하므로 26칸짜리 배열 arr에 각 소문자가 나온 횟수를 세보자. 그럼 arr[i]가 1이 되는 경우, 해당 문자가 존재하는게 된다. 따라서 별도로 cnt라는 변수를 둬서 arr[i]가 1이 되는 경우 증가시킨다. 최종적으로 cnt가 26이라면 모든 문자가 있는 것이고, 아니라면 뭔가 빠진 문자가 있는 셈이다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; public class Main { private void solution() throws Except.. 2022. 6. 17.
[자바] 백준 21756 - 지우개 (boj java) 문제 : boj21756 배열에 실제로 값을 넣어보고, 문제에서 제시된 방법대로 시뮬레이션을 돌리듯 실제로 동작하도록 구현해보면 쉽게 풀 수 있다. 그냥 배열로 해도 되지만, 이하 코드는 ArrayList를 가지고 해봤다. 이 경우 index값은 0부터 시작되므로 index 기준으로는 짝수번을 제거해야 한다. 처음에 1부터 n까지를 ArrayList에 넣는다. -> ArrayList 하나를 더 만들고 index 번호 기준으로 홀수번호들을 새로 만든 곳에 담는다. -> 기존 ArrayList와 바꿔치기를 한다. 위의 과정을 값이 1개만 남을 때 까지 계속하면 된다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; im.. 2022. 6. 16.