본문 바로가기

전체 글1068

[자바] 백준 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.
[자바] 백준 14656 - 조교는 새디스트야!! (boj java) 문제 : boj14656 n개를 입력받으면서, i번째 입력값이 i가 아니라면 cnt라는 값을 증가시켜준다. 최종적으로 cnt값을 출력해주면 된다. 예제 입력 1의 경우 다음과 같이 답을 구할 수 있다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { private void solution() throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine(.. 2022. 6. 15.
[자바] 백준 2028 - 자기복제수 (boj java) 문제 : boj2028 항상 n^2의 자리수는 n보다 크거나 같다. 따라서 n^2과 n에 대해 둘 다 낮은 자리수부터 한 자리씩 빼내고(n%10), 둘을 비교한 후 둘 다 낮은 자리수를 없앤다(n/10). 이걸 n이 0이 될 때 까지 반복하면 n에 해당하는 자리수만큼 비교할 수 있다. 예를들어 n이 11일 경우, n^2을 nPow라 하면 nPow=121이다. 처음에 n%10과 nPow%10을 비교하고 동일하므로 n/=10, nPow/=10을 해주면 1과 12가 된다. 마찬가지로 다시 n%10과 nPow%10을 비교하고 이번엔 다르므로 NO를 출력해주면 된다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; publi.. 2022. 6. 14.
[자바] 백준 23825 - SASA 모형을 만들어보자 (boj java) 문제 : boj23825 각 문자를 만드는데에 n이 2개, m이 2개 필요하다. 따라서 중요한건 둘 중 더 작은 수치이다. 만약 n이 4, m이 1000000 이라고 한다면 결국 n은 4/2개로 2개까지 가능한거니, m이 얼마나 많던지 상관이 없게 되는 것이다. 따라서 이하의 수식을 구해주면 된다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { private void solution() throws Exception { BufferedReader br = new BufferedReader(new InputStreamRe.. 2022. 6. 13.
[자바] 백준 5789 - 한다 안한다 (boj java) 문제 : boj5789 짝수개수의 문자가 들어오므로, 입력이 어떻게 들어오던지 상관없이 중앙의 두 문자만 확인하면 된다. 입력으로 들어온 문자열의 길이를 기준으로 중앙의 두 글자를 비교해서 답을 출력해주면 된다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { private void solution() throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); StringBuilder sb = new S.. 2022. 6. 12.
[자바] 백준 2154 - 수 이어 쓰기 3 (boj java) 문제 : boj2154 n이 최대 100000이므로, 모두 이어쓴다고 해도 500000개 이하 정도 수준의 character 수로 구성될 것이다. 따라서 직접 해당 문자열을 만들어주고, 문자열에서 n을 찾아줘도 시간내에 통과 가능하다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { private void solution() throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); StringBuild.. 2022. 6. 11.
[자바] 백준 8462 - 배열의 힘 (boj java) 문제 : boj8462 가장 간단한 방법으로, 각 쿼리마다 직접 해당 범위를 순회하면서 가장 많은 등장 수를 찾는 것은 당연히 간단하다. 하지만 그러면 O(TN)이 될 것이므로 시간초과가 나게 된다. 그러니 이번엔 이전 쿼리의 결과를 이용할 방법을 생각해보자. 첫 번째 쿼리가 i=3, j=10이고 두 번째 쿼리가 i=5, j=11 이라고 해보자. 그림으로 나타내면 아래와 같다. 이 경우 만약 위에서 말한 방법대로 매번 직접 순회하며 볼 경우 첫 번째 쿼리는 8번, 두 번재 쿼리는 7번을 봐야하므로 총 15번을 봐야한다. 하지만 첫 번째 쿼리에서 i가 +2가 됬으므로 주황색으로 빗금친 부분을 빼면 2번을 빼면 되고, 마찬가지 방식으로 파란 빗금부븐을 1번 더해줄 수 있다. 그럼 총 15번 필요했던게 3번으.. 2022. 6. 10.