728x90
1단계 : 2798번 / 블랙잭
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
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];
st = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++){
arr[i] = Integer.parseInt(st.nextToken());
}
int result = search(arr, N, M);
bw.write(result+"\n");
bw.flush();
bw.close();
}
static int search (int[] a, int n, int m){
int result = 0;
for(int i=0; i<n-2; i++){
for(int j=i+1; j<n-1; j++){
for(int k=j+1; k<n; k++){
int sum = a[i] + a[j] + a[k];
if (m == sum){
return sum;
}
if (result < sum && sum < m){
result = sum;
}
}
}
}
return result;
}
} // Main
2단계 : 2231번 / 분해합
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
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 result = 0;
for (int i=1; i<N; i++){
if (num(i) == N){
result = i;
break;
}
}
bw.write(result+" ");
bw.flush();
bw.close();
}
static int num (int N){
int sum = N;
sum += N % 10;
while (N / 10 != 0){
N = N / 10;
sum += N % 10;
}
return sum;
}
} // Main
3단계 : 7568번 / 덩치
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
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[][] person = new int[N][2];
StringTokenizer st;
for(int i=0; i<N; i++){
st = new StringTokenizer(br.readLine());
person[i][0] = Integer.parseInt(st.nextToken());
person[i][1] = Integer.parseInt(st.nextToken());
}
StringBuilder sb = new StringBuilder();
for(int i=0; i<N; i++){
int rank = 1;
for(int j=0; j<N; j++){
if (i == j){
continue;
}
if (person[i][0] < person[j][0] && person[i][1] < person[j][1]){
rank ++;
}
}
sb.append(rank).append(" ");
}
bw.write(sb.toString());
bw.flush();
}
} // Main
4단계 : 1018번 / 체스판 다시 칠하기
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main{
public static boolean[][] arr; // W : true, B : false
public static int min = 64;
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()); // 세로 길이
arr = new boolean[N][M]; // 타일 색상 판단 배열 생성
for(int i=0; i<N; i++){
String str = br.readLine();
for(int j=0; j<M; j++){
if (str.charAt(j) == 'W'){
arr[i][j] = true;
}
else {
arr[i][j] = false;
}
}
} // 타일 저장 완료!
int N_row = N - 7;
int M_column = M - 7;
for(int i=0; i<N_row; i++){
for(int j=0; j<M_column; j++){
find(i, j);
}
}
bw.write(min+" ");
bw.flush();
bw.close();
}
public static void find(int x, int y) { // (x, y) : 자를 타일의 맨왼쪽 상단 좌표
// (end_x, end_y) : 맨 오른쪽 하단 좌표
int end_x = x + 8;
int end_y = y + 8;
int count = 0;
boolean TF = arr[x][y]; // 첫번쨰 칸의 색
for(int i=x; i<end_x; i++){
for(int j=y; j<end_y; j++){
if (arr[i][j] != TF){
count ++;
}
TF = (!TF); // 인접한 칸의 색은 서로 다른색.
}
TF = (!TF); // 줄 갱신시 다른 색.
}
count = Math.min(count, 64 - count); // 첫 타일 'W' or 'B' 비교.
min = Math.min(min, count); // 최솟값 (min) 갱신.
}
} // Main
* boolean 2차원 배열을 통해 타일 색 판단하기
* 8X8 크기의 타일을 자르는 경우 (N-7) * (M-7)
* 자른 타일의 시작하는 색 : 'B', 'W'
Math.min(a, b); // 두 수 중 작은 값을 return
[참고 문서]
https://st-lab.tistory.com/101
5단계 : 1436번 / 영화감독 숌
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
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()); // N번째 영화
int i=666; int count_N=0; int result = 0;
while(true){
if (check(i)) {
count_N ++;
if(count_N == N){
result = i;
break;
}
}
i++;
}
bw.write(result+" ");
bw.flush(); bw.close();
}
// 종말 숫자 판단 함수
public static boolean check(int num){
while (true){
if (num % 1000 == 666){break;}
if (num / 10 == 0){break;}
num = num / 10;
}
if (num % 1000 == 666) {return true;}
else {return false;}
}
} // Main
728x90
'백준 > 단계별로 풀어보기' 카테고리의 다른 글
백준 - 단계별로 풀어보기 - JAVA (11단계 : 재귀 / 6문제) (2022.12.31 토) (0) | 2022.12.30 |
---|---|
백준 - 단계별로 풀어보기 - JAVA (10단계 : 정렬 (2) / 5문제) (2022.12.29 목) (0) | 2022.12.29 |
백준 - 단계별로 풀어보기 - JAVA (10단계 : 정렬 (1) / 7문제) (2022.12.29 목) (0) | 2022.12.28 |
백준 - 단계별로 풀어보기 - JAVA (9단계 : 2차원 배열 / 3문제) (2022.12.28 수) (0) | 2022.12.28 |
백준 - 단계별로 풀어보기 - JAVA (8단계 : 기본 수학 2 / 6문제) (2022.12.27 화) (0) | 2022.12.27 |