본문 바로가기

BOJ749

[자바] 백준 10830 - 행렬 제곱 (java) 문제 : boj10830 필요 알고리즘 개념 행렬 곱셈 (수학) 행렬끼리 곱하는 방법을 알아야 한다. 분할정복을 이용한 거듭제곱 분할정복을 이용해 거듭제곱을 최적화하는 방법을 알아야 한다. 나머지 연산의 분배법칙 나머지 연산의 분배법칙을 알고 있어야 풀 수 있다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 우선 행렬끼리 곱하는 방법을 모른다면, 구글링을 통해 알아보자. 기초 수학이므로 반드시 알고 있어야 한다. N이 3인.. 2022. 8. 2.
[자바] 백준 1148 - 단어 만들기 (java) 문제 : boj1148 필요 알고리즘 개념 문자열 문자열의 각 character에서 원하는 정보를 뽑아낼 수 있어야 한다. 아스키 코드 아스키 코드에 대한 이해가 좀 있어야 한다. 구현력(?) 사실 로직 자체의 난이도는 실버 중하위수준인데, 구현이 빡쌘편이라 골드로 책정된 문제이다 ㅋㅋ 자신이 생각난걸 구현하는데 평소에 무리가 없었어야 풀만할 것 같다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 로직부터 한번 살펴보자. .. 2022. 8. 2.
[자바] 백준 20955 - 민서의 응급 수술 (java) 문제 : boj20955 필요 알고리즘 개념 트리 트리의 특징에 대해 알고 있어야 이 문제를 풀 수 있다. 분리 집합 (disjoint set) 혹은 유니온 파인드 (union-find) 분리 집합 알고리즘인 유니온 파인드를 알고 있으면 간단하게 이 문제를 풀 수 있다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 이 문제에서는 정점의 개수가 주어지고(N), M개의 간선 정보가 주어진다. 그럼 다음의 입력값을 생각해보자. .. 2022. 7. 31.
[자바] 백준 23303 - 이 문제는 D2 입니다. (java) 문제 : boj23303 필요 알고리즘 개념 문자열 문자열에서 원하는 문자열을 찾을 수 있어야 한다. 조건문 조건문으로 원하는 조건을 만족하는지 확인할 수 있어야 한다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 문자열을 입력받아 "D2" 또는 "d2"가 존재하는지만 확인하면 된다. 이 때, 입력받은 문자열을 전부 소문자로 변경하게되면 "d2"만 한번 찾아주면 되므로 좀 더 로직을 짜기 편해진다. 자바에서는 toLower.. 2022. 7. 30.
[자바] 백준 25314 - 코딩은 체육과목 입니다 (java) 문제 : boj25314 필요 알고리즘 개념 입력받기, 반복문 숫자를 입력받을 수 있고, 반복문을 사용할 수 있다면 풀 수 있다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 사실 같은 브론즈5인 1000번 A+B에 비해선 많이 어렵다(?). N을 입력받아 숫자로 변경해야 하고, 그걸 4로 나눠야 하며 반복문을 통해 N/4번 "long "을 출력해준 후 "int"를 출력해줘야 한다. 알고리즘적으로는 딱히 설명할게 없다. 이.. 2022. 7. 30.
[자바] 백준 21918 - 전구 (java) 문제 : boj21918 필요 알고리즘 개념 입력받기, 배열, 반복문, 조건문 배열에 입력을 받고 조건문과 반복문을 쓸줄 알면 된다. 시뮬레이션 별건 아니고, 그냥 구현하란 말과 동일하다. 문제에서 제시된 사항을 그대로 구현해서 그대로 실행만 되면 된다. 참고로 백준에서 '구현'태그는 대강 뭐 특별히 쓸거 없을때 달아두는 경우가 많다 ㅋㅋ 그 중에 문제에서 제시된대로 구현만 잘 하면 되는 경우 보통 시뮬레이션 태그도 같이 단다. 사람마다 다를 수 있다. 내 경우엔 그렇다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고.. 2022. 7. 28.
[자바] 백준 22943 - 수 (java) 문제 : boj22943 필요 알고리즘 개념 브루트포스 가능한 모든 경우에 대해 완전탐색을 통해 경우의 수를 찾아줄꺼다. 에라토스테네스의 체 소수 판정 알고리즘이다. 한 개의 수가 소수인지 판정할때는 안쓰인다. 이 문제에서는 특정 범위 이내의 모든 소수를 찾아두고 풀이를 진행할 것이므로 에라토스테네스의 체를 사용했다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 우선 이 문제를 풀기위해 알아야 하는 것들을 생각해보자. 1... 2022. 7. 28.
[자바] 백준 24839 - Speed Typing (java) 문제 : boj24839 필요 알고리즘 개념 문자열 파싱 String을 character 단위로 볼 줄 알아야 한다. 그리디 알고리즘 (greedy) I의 모든 문자가 순서대로 P에 존재해야 하는지를 매번 '그리디하게' 확인한다. 두 포인터 (two pointer) I와 P의 시작점에 가상의 포인터를 하나씩 두고 양측이 점점 움직이면서 답을 찾아나가야 한다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 I는 읽기 힘드므로,.. 2022. 7. 27.
[자바] 백준 2195 - 문자열 복사 (boj java) 문제 : boj2195 p의 각 부분 문자열들에 대해 가장 s에 많이 포함되도록 골라주면 된다. 예를들어 예제 입력 1의 경우엔 다음과 같다. xy0z zzz0yyy0xxx 위의 경우로만 보면 헷갈릴수도 있으니 다음의 예시를 봐보자. abxyz abababxyzzz 위와 같이 p를 각 부분문자열로 나눴을 때의 각 부분문자열이 s에 가장 많이 포함되게 해주면 된다. 그럼 이 부분문자열 구간을 어떻게 나눌 수 있을까? 간단하게, p의 첫번째 문자부터 차례대로 보면서 s에 포함되어있는 최대 부분문자열까지 잘라내면 된다. 예를들어 위의 예제는 다음과 같이 진행된다. 1. abababxyzzz "a"는 s에 포함되므로 좀 더 봐보자. 2. abababxyzzz "ab"도 s에 포함되므로 좀 더 봐보자. 3. ab.. 2022. 7. 26.
[자바] 백준 23809 - 골뱅이 찍기 - 돌아간 ㅈ (boj java) 문제 : boj23809 규칙을 찾고 구현해보자! 1. n줄에 n개의@ + 3n개의 공백 + n개의@ 2. n줄에 n개의@ + 2n개의 공백 + n개의@ 3. n줄에 3n개의 @ 4. n줄에 n개의@ + 2n개의 공백 + n개의@ 5. n줄에 n개의@ + 3n개의 공백 + n개의@ 이렇게 구현해주면 된다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { private void print(int n, StringBuilder sb, int gap) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { sb.append('@').. 2022. 7. 25.