본문 바로가기

구현181

[자바, 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.
[자바] 백준 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.
[자바] 백준 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.
[자바] 백준 23808 - 골뱅이 찍기 - ㅂ (boj java) 문제 : boj23808 규칙을 찾아 그걸 그대로 구현해주는 문제이다. 일단 가로로만 보자. 그럼 두 가지 형태가 보이는 것을 알 수 있다. '@ @' 형태와 '@@@@@' 형태이다. 이 때, n=1일 대와 n=3일때를 비교해보면 각 행은 총 길이가 n*5임을 알 수 있고, '@ @'형태의 경우엔 n개의 @ + n*3개의 공백 + n개의 @으로 이루어져 있음을 알 수 있다. 그럼 이걸 우선 함수로 빼두자. 이하 코드에서 printSplitShells가 그 구현이다. 그리고 '@@@@@'형태는 더 간단하게 n*5개의 @으로 이루어져 있다. 이하 코드에서 printFullShells가 이 형태를 나타낸다. 다음으로는 세로로 보자. n*2개의 '@ @'형태 + n개의 '@@@@@'형태 + n개의 '@ @'형태.. 2022. 6. 5.
[자바] 백준 4108 - 지뢰찾기 (boj java) 문제 : boj4108 무지성 구현문제이다. RxC 배열의 모든 칸을 보면서 '*'을 만날 시 그 주변 8개의 칸에 대해 카운트를 시켜주면 된다. 주의점은 '*'이었던 위치는 특별한 값으로 표시를 해주면 좋다(이하 코드에선 -1로 했음). 시간복잡도는 O(8RC) 이다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; import java.util.stream.Stream; public class Main { private void solution() throws Exception { BufferedReader .. 2022. 6. 2.