soo 문제집 완전탐색 easy 문제 남은 32문제중 22문제를 풀었고, 그중 힌트를 참고한 문제 및 정리하기 위한 11개의 문제를 재풀이해서 학습 및 체득하려는 목적으로 작성했습니다.
| 문제번호 | 제목 | 난이도 |
|---|---|---|
| 18868번 | 멀티버스 I | 브론즈 1 |
| 1059번 | 좋은 구간 | 실버 4 |
| 1251번 | 단어 나누기 | 실버 5 |
| 2422번 | 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 | 실버 4 |
| 2453번 | 기상청 인턴 신현수 | 브론즈1 |
| 2503번 | 숫자 야구 | 실버 3 |
| 2635번 | 수 이어가기 | 실버 5 |
| 5568번 | 카드 놓기 | 실버 4 |
| 1065번 | 한수 | 실버 4 |
| 1120번 | 문자열 | 실버 4 |
| 2607번 | 비슷한 단어 | 실버 2 |
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int m = Integer.parseInt(st.nextToken());
int n = Integer.parseInt(st.nextToken());
int[][] arr = new int[m][n];
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < n; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
int ans = 0;
for (int i = 0; i < m; i++) {
for (int j = i+1; j < m; j++) {
boolean isOk = false;
for (int k = 0; k < n; k++) {
for (int l = k+1; l < n; l++) {
if(arr[i][k] < arr[i][l] && arr[j][k] < arr[j][l]){
isOk = true;
} else if (arr[i][k] == arr[i][l] && arr[j][k] == arr[j][l]) {
isOk = true;
}else if(arr[i][k] > arr[i][l] && arr[j][k] > arr[j][l]){
isOk = true;
}else{
isOk = false;
break;
}
}
if(!isOk){
break;
}
}
if(isOk){
ans++;
}
}
}
bw.write(ans+"");
br.close();
bw.close();
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int l = Integer.parseInt(br.readLine());
int[] arr = new int[l];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < l; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int n = Integer.parseInt(br.readLine());
Arrays.sort(arr);
int start = 0;
int end = 1001;
int count = 0;
for (int i = 0; i < l; i++) {
if(arr[i] < n){
if(arr[i] > start){
start = arr[i];
}
}else if(arr[i] > n){
if(arr[i] < end){
end = arr[i];
}
}else{
start = -1;
end = -1;
n = -1;
break;
}
}
for (int i = start+1; i <= n; i++) {
for (int j = n; j <= end - 1; j++) {
if(i != j){
count++;
}
}
}
bw.write(count+"");
br.close();
bw.close();
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String input = br.readLine();
List<String> list = new ArrayList<>();
for (int i = 1; i < input.length(); i++) {
for (int j = i+1; j < input.length(); j++) {
StringBuilder a = new StringBuilder(input.substring(0, i));
StringBuilder b = new StringBuilder(input.substring(i, j));
StringBuilder c = new StringBuilder(input.substring(j));
StringBuilder tmp = new StringBuilder(a.reverse()).append(b.reverse()).append(c.reverse());
list.add(tmp.toString());
}
}
Collections.sort(list);
bw.write(list.get(0));
br.close();
bw.close();
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[][] arr = new int[n+1][n+1];
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
int first = Integer.parseInt(st.nextToken());
int second = Integer.parseInt(st.nextToken());
arr[first][second] = -1;
arr[second][first] = -1;
}
int count = 0;
for (int i = 1; i < n+1; i++) {
for (int j = i+1; j < n+1; j++) {
for (int k = j+1; k < n+1; k++) {
if(arr[i][j] == 0 && arr[j][k] ==0 && arr[i][k] == 0){
count++;
}
}
}
}
bw.write(count+"");
br.close();
bw.close();
}
}
2422번 - 한윤정이 이탈리아에 가서 아이스크림을 사먹는데
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int[] arr = new int[n];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
if(i!= 0){
arr[i] += arr[i-1];
}
}
int ans = arr[k-1];
for (int i = k; i < n; i++) {
ans = Math.max(ans, arr[i] - arr[i-k]);
}
bw.write(ans+"");
br.close();
bw.close();
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
boolean[] arr = new boolean[1000];
for (int i = 123; i < 988; i++) {
String s = String.valueOf(i);
if(s.charAt(0) == '0' || s.charAt(1) == '0' || s.charAt(2) == '0'){
continue;
}
if(s.charAt(0) == s.charAt(1) || s.charAt(1) == s.charAt(2) || s.charAt(0) == s.charAt(2)){
continue;
}
arr[i] = true;
}
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int num = Integer.parseInt(st.nextToken());
int strike = Integer.parseInt(st.nextToken());
int ball = Integer.parseInt(st.nextToken());
for (int j = 123; j < 988; j++) {
if(arr[j]){
int strikeCount = 0;
int ballCount = 0;
for (int k = 0; k < 3; k++) {
String s1 = String.valueOf(num);
for (int l = 0; l < 3; l++) {
String s2 = String.valueOf(j);
if(s1.charAt(k) == s2.charAt(l) && k == l){
strikeCount++;
}
if(s1.charAt(k) == s2.charAt(l) && k!=l){
ballCount++;
}
}
}
if(strike == strikeCount && ball == ballCount){
arr[j] = true;
}else{
arr[j] = false;
}
}
}
}
int ans = 0;
for (int i = 123; i < 988; i++) {
if(arr[i]){
ans++;
}
}
bw.write(ans+"");
br.close();
bw.close();
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int input = Integer.parseInt(br.readLine());
List<Integer> list = new ArrayList<>();
int count = 0;
for (int i = 1; i < input; i++) {
List<Integer> tmp = new ArrayList<>();
int first = input;
int second = i;
tmp.add(first);
tmp.add(second);
while(true){
int third = first - second;
if(third >= 0){
tmp.add(third);
}else{
break;
}
first = second;
second = third;
}
if(count < tmp.size()){
count = tmp.size();
list = tmp;
}
}
bw.write(list.size()+"\n");
for (int i = 0; i < list.size(); i++) {
bw.write(list.get(i) + " ");
}
br.close();
bw.close();
}
}
import java.io.*;
import java.util.*;
public class Main {
static boolean[] visited;
static Set<String> set = new HashSet<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int k = Integer.parseInt(br.readLine());
visited = new boolean[100];
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
backtracking(arr, 0, k, "");
bw.write(set.size()+"");
br.close();
bw.close();
}
private static void backtracking(int[] arr, int depth, int k, String s) {
if(depth == k){
set.add(s);
return;
}
for (int i = 0; i < arr.length; i++) {
if(!visited[i]){
visited[i] = true;
backtracking(arr, depth+1, k, s + String.valueOf(arr[i]));
visited[i] = false;
}
}
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int count = 0;
if(n < 100){
count = n;
}else{
count = 99;
for (int i = 100; i <= n; i++) {
int first = i/100;
int second = (i/10) % 10;
int third = i%10;
if(first - second == second - third){
count++;
}
}
}
bw.write(count+"");
br.close();
bw.close();
}
}
만약 n이 4자리나 5자리 이상이 된다면?
1. 그럴때는 해당 수의 첫자리와 둘째자리를 미리 구한 다음에 다시 둘째자리부터 해당 숫자의 길이만큼 포문을 돌아 각 자리수의 차이를 비교할 것 같다
2. 만약 미리 구해둔 차이와 같지 않은 경우 break해주고 count를 증가시키지 않는다.
3. 만약 순회를 모두 통과한다면 count를 증가시키며 이때 boolean isOk를 이용할 것 같다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
String a = st.nextToken();
String b = st.nextToken();
int count = a.length();
for (int i = 0; i < b.length() - a.length() + 1; i++) {
int tmp = 0;
for (int j = 0; j < a.length(); j++) {
if(a.charAt(j) != b.charAt(j+i)){
tmp++;
}
}
count = Math.min(tmp, count);
}
bw.write(count+"");
br.close();
bw.close();
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
String input = br.readLine();
int[] alpha = new int[26];
for (int i = 0; i < input.length(); i++) {
alpha[input.charAt(i) - 'A']++;
}
int count = 0;
for (int i = 0; i < n-1; i++) {
String s = br.readLine();
int[] tmp = alpha.clone();
int same = 0;
for (int j = 0; j < s.length(); j++) {
if(tmp[s.charAt(j) - 'A'] > 0){
same++;
tmp[s.charAt(j)- 'A']--;
}
}
if(s.length() == input.length()-1){
if(same == s.length()){
count++;
}
}else if (s.length() == input.length()){
if(same == input.length() || same== input.length()-1){
count++;
}
}else if (s.length() == input.length()+1){
if(same == input.length()){
count++;
}
}
}
bw.write(count+"");
br.close();
bw.close();
}
}