scone-lemon
D2 review 본문
D2_1945 간단한 소인수분해
풀긴 했지만 처음과 다르게 시간을 많이 들여서 다시 풀어봐도 좋을 것 같다..
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 간단한 소인수분해
public class D2_1945 {
static int[] nums = {2,3,5,7,11};
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int t = 1; t <= T; t++) {
sb.append("#" + t + " ");
int N = Integer.parseInt(br.readLine());
for (int i = 0 ; i < nums.length ; i++) {
int cnt = 0;
while(N % nums[i] == 0) {
N = N / nums[i];
cnt = cnt + 1;
}
sb.append(cnt + " ");
}
sb.append("\n");
}
System.out.println(sb.toString());
}
}
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 간단한 소인수분해
public class D2_1945 {
public static int[] nums = { 2, 3, 5, 7, 11 };
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int TC = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= TC; tc++) {
sb.append("#").append(tc).append(" ");
int N = Integer.parseInt(br.readLine());
// 아니 이걸 짜는데 30분이 넘게 걸린다는게 너무 어이없었다..
// 처음에 풀때는 휘리릭 풀었던 것 같은데..
// 실력이 들쭉날쭉하다고 느끼면 사실 그게 실력이 없는것에 대한 반증이라고 하던데..
// 반복이 답.. 홧팅..
int index = 0;
int count = 0;
while(true) {
if(index == nums.length) {
sb.append("\n");
break;
}
if(N%nums[index]==0) {
N = N/nums[index];
count = count + 1;
}
if(N%nums[index]!=0) {
sb.append(count).append(" ");
index++;
count = 0;
}
}
}
System.out.println(sb.toString());
}
}
D2_1928 Base64 Decode
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Base64;
/*
이슈사항
1. 우선 문제부터 이해가 안갔다
2. 위키피디아를 찾아봤더니 단순히 아스키코드에 숫자를 더한다고 해결될 일이 아니라는 걸 알았다.
비트를 자르고 다시 값을 부여해야하는(?) 문제 분야 중에서도 취약한 부분의 문제였다.
그래서 포기하고 구글한테 물어보았다.
3. Base64 라이브러리를 사용하였다.
4. Base64 에 대해서 더 찾아보면 좋을 것 같다.
5. 비트연산자를 활용해서 푸는 방법을 찾아보면 좋을 것 같다.
*/
// Base64 Decoder
public class D2_1928 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int t = 1 ; t <= T ; t++) {
sb.append("#" + t + " ");
/*char[] codes = br.readLine().toCharArray();
for (int i = 0; i < codes.length; i++) {
codes[i] = (char) (codes[i] + 65);
}*/
/*String encodeText = br.readLine();
String decodeText = new String(Base64.getDecoder().decode(encodeText));
sb.append(decodeText).append("\n");*/
String encodeText = br.readLine();
byte[] decodeText = Base64.getDecoder().decode(encodeText);
String resultText = new String(decodeText);
sb.append(resultText).append("\n");
}
System.out.println(sb.toString());
}
}
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Base64;
// Base64 Decoder
public class D2_1928 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int TC = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= TC; tc++) {
sb.append("#").append(tc).append(" ");
// 이건 거의 외워서 하는 느낌이다..
// byte to String은 까먹어서 또 구글링 했지롱
String input = br.readLine();
String output = new String(Base64.getDecoder().decode(input));
sb.append(output).append("\n");
}
System.out.println(sb.toString());
}
}
D2_1986 지그재그 숫자
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 지그재그 숫자
public class D2_1986 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int tc = 1 ; tc <= T ; tc++) {
sb.append("#" + tc + " ");
int N = Integer.parseInt(br.readLine());
int val = 0;
for (int n = 1 ; n <= N ; n++) {
if(n%2!=0) val = val + n;
else if(n%2==0) val = val - n;
}
sb.append(val);
sb.append("\n");
}
System.out.println(sb.toString());
}
}
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 지그재그 숫자
public class D2_1986 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int TC = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= TC; tc++) {
sb.append("#").append(tc).append(" ");
int N = Integer.parseInt(br.readLine());
int num = 1;
// 이것도 이렇게 안짰던 것 같은데..
// 뭔가 살짝 그때보다 맛이 간 것 같다
// 되게 직관적으로? 감으로? 코딩하는 느낌?
// 정확한 근거에 기반해서 코딩해야 할 것 같은데..
for (int i = 2; i <= N; i++) {
if (i % 2 == 0) {
num = num - i;
}
else {
num = num + i;
}
}
sb.append(num).append("\n");
}
System.out.println(sb.toString());
}
}
D2_1288 새로운 불면증 치료법
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 새로운 불면증 치료법
public class D2_1288_sol {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
String s = br.readLine();
int n = Integer.parseInt(s);
// s 필요성 : while 작업에서 한자리씩 접근하기 위해서 (substring을 사용하기 위해서) String타입 변수를 만들어둔다
// n 필요성 : n*x 작업을 위해서 (n의 배수를 구함으로써 while을 반복시키기 위해서) int타입 변수를 만들어둔다
boolean check[] = new boolean[10];
int count = 0;
int x = 1;
while (true) {
for (int i = 0; i < s.length(); i++) {
int tmp = Integer.parseInt(s.substring(i, i + 1));
// for 문이 s.length 까지 돌고
// substring으로 s의 i자리만 tmp에 저장하기 때문에
// 결국 for 문을 돌면서 s의 모든 자리수에 접근할 수 있다
if (check[tmp] == false) {
count++;
check[tmp] = true;
// check[해당 i번째 자리수] 가 false 이면 count++ 해주고 true로 바꿔준다
// count++ 필요성 :
// 0~9 숫자가 모두 나와야 하므로 결국은 check[] == false 인 곳을 확인하는 과정과 같다
// false 인 곳을 확인하면 count를 올려줌으로써 0~9 를 모두 방문했다는 사실을 표현해 줄 수 있다
// false -> ture 필요성 : 해당 자리수가 등장했으므로 boolean형의 check배열에 해당 자리수 번째에 표시를 해둔다
}
}
if (count == 10)
break;
// 0~9 숫자 모두 나왔기 때문에, while문을 탈출한다
x++;
s = Integer.toString(n * x);
// count!=10 이라면, 다음 while 반복을 위한 준비를 해준다
// x : n에 곱해줄 수 1 -> 2
// s : n*x 값을 s에 저장
// String s 인 이유 : while문 처음에서 subString을 써야 하니까
}
System.out.println("#" + tc + " " + s);
}
}
}
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
// 새로운 불면증 치료법 : 실패
public class D2_1288 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int t = 1; t <= T; t++) {
sb.append("#").append(t).append(" ");
// String : 자릿수와 관련한 작업을 처리하기 위해서 선언한다
// int : 배수와 관련한 작업을 처리하기 위해서 선언한다
// 0~9 니까 10만큼 크기를 잡아준다
int iN = Integer.parseInt(br.readLine());
boolean[] flags = new boolean[11];
int num = 1;
while(true) {
int nN = iN*num;
String sN = Integer.toString(nN);
char[] cN = sN.toCharArray();
//System.out.println(num);
//System.out.println(Arrays.toString(cN));
for (int i = 0; i < cN.length; i++) {
flags[cN[i]] = true;
}
num++;
for (int i = 0; i < flags.length; i++) {
if(flags[i]) continue;
else break;
}
}
}
System.out.println(sb.toString());
} // end of main
} // end of class
D2_1284 수도 요금 경쟁
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 수도 요금 경쟁
public class D2_1284 {
private static int P,Q,R,S,W;
private static int func() {
int a,b;
// A사 요금
a = W*P;
// B사 요금
if (W>=R) { b = (W-R)*S + Q; }
else { b = Q; }
return a>b ? b : a;
}
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int T = Integer.parseInt(br.readLine());
for (int tc = 0; tc < T; tc++) {
sb.append("#").append(tc+1).append(" ");
st = new StringTokenizer(br.readLine(), " ");
P = Integer.parseInt(st.nextToken()); // A사의 1리터당 내야되는 돈(원)
Q = Integer.parseInt(st.nextToken()); // B사의 기본요금(원)
R = Integer.parseInt(st.nextToken()); // B사의 초과기준 월간 사용량(리터)
S = Integer.parseInt(st.nextToken()); // B사의 월간 사용량이 R초과시 지불해야 하는 요금(원)
W = Integer.parseInt(st.nextToken()); // 종민이의 수도 사용량(리터)
sb.append(func()).append("\n");
}
System.out.println(sb.toString());
}
}
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
// 수도 요금 경쟁
public class D2_1284 {
public static int func(int[] arr) {
int useA=0, useB = 0;
if(arr[4]>arr[2]) {
useA = arr[0]*arr[4];
useB = arr[1] + (arr[4]-arr[2])*arr[3];
}
else {
useA = arr[0]*arr[4];
useB = arr[1];
}
return Math.min(useA, useB);
}
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
sb.append("#").append(tc).append(" ");
int[] details = new int[5];
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < details.length; i++) {
details[i] = Integer.parseInt(st.nextToken());
}
sb.append(func(details)).append("\n");
}
System.out.println(sb.toString());
}
}
D2_1989 초심자의 회문 검사
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 초심자의 회문 검사
public class D2_1989_br {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
String str = br.readLine();
sb.append("#").append(tc).append(" ");
int result = 1; // 1:회문이다, 2:회문아니다
for (int i = 0; i < str.length()/2; i++) {
//if(!str.substring(i, i+1).equals(str.substring(str.length()-1-i, str.length()-i))) {
if(str.charAt(i)!=str.charAt(str.length()-1-i)) {
result = 0;
break;
}
}
sb.append(result).append("\n");
}
System.out.println(sb.toString());
}
}
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 초심자의 회문 검사
public class D2_1989 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
int result = 0;
// 이걸 지난번에 푼 아이디어가 기억이 났던 이유는, 예은이한테 내 아이디어에 대해서 설명했기 때문인 것 같다
// 기억할 수 있으려나 하면서 풀었는데, 다른문제보다 시간도 조금 걸리고 풀었던 방식이 쉽게 생각나서 다행인 것 같다
for (int tc = 1; tc <= T; tc++) {
sb.append("#").append(tc).append(" ");
String str = br.readLine();
for (int i = 0; i < str.length(); i++) {
if (str.substring(i, i+1).equals(str.substring(str.length()-i-1, str.length()-i))) {
result = 1;
continue;
}
else {
result = 0;
break;
}
}
sb.append(result).append("\n");
}
System.out.println(sb.toString());
}
}
D2_1959 두 개의 숫자열
성공하긴 했지만 배열과 관련된 문제이니 다시 풀어봐도 좋을 것 같다..
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
// 두 개의 숫자열
public class D2_1959_retry4 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
sb.append("#").append(tc).append(" ");
st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int[] arr1 = new int[N];
int[] arr2 = new int[M];
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < arr1.length; i++) {
arr1[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < arr2.length; i++) {
arr2[i] = Integer.parseInt(st.nextToken());
}
// System.out.println(Arrays.toString(arr1));
// System.out.println(Arrays.toString(arr2));
// 1) 작은배열의 시작인덱스를 큰배열에서 옮기면서 최댓값을 구하기
// 2) 작은배열 크기만큼 최댓값배열을 만들어서 각 시작인덱스에 해당하는 최댓값을 차곡차곡 넣어주기
int max = 0;
if (arr1.length < arr2.length) {
for (int i = 0; i <= arr2.length - arr1.length + 1; i++) {
int result =0;
for (int j = 0; j <= arr1.length; j++) {
result = result + arr1[j] * arr2[j + i];
}
max = Math.max(result, max);
}
}
else if (arr1.length > arr2.length) {
for (int i = 0; i <= arr1.length - arr2.length + 1; i++) {
int result = 0;
for (int j = 0; j <= arr2.length; j++) {
result = result + arr1[j+i] * arr2[j];
}
max = Math.max(result, max);
}
}
else {
int result = 0;
for (int i = 0; i < arr1.length; i++) {
result = result + arr1[i]*arr2[i];
}
max = Math.max(result, max);
}
sb.append(max);
}
System.out.println(sb.toString());
}
}
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
// 두 개의 숫자열
public class D2_1959 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
sb.append("#").append(tc).append(" ");
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int[] arrA = new int[N];
int[] arrB = new int[M];
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < arrA.length; i++) {
arrA[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < arrB.length; i++) {
arrB[i] = Integer.parseInt(st.nextToken());
}
//System.out.println(Arrays.toString(arrA));
//System.out.println(Arrays.toString(arrB));
int result = 0;
int max = Integer.MIN_VALUE;
if (N > M) {
for (int i = 0; i < N-M+1; i++) {
result = 0;
for (int j = 0; j < M; j++) {
result = result + arrB[j] * arrA[i+j];
//System.out.println(arrB[j] + " , " + arrA[i+j]);
}
//System.out.println(result);
if(max < result) {
max = result;
}
//System.out.println(max);
}
}
else if (N < M) {
for (int i = 0; i < M-N+1; i++) {
result = 0;
for (int j = 0; j < N; j++) {
result = result + arrA[j] * arrB[i+j];
//System.out.println(arrA[j] + " , " + arrB[i+j]);
}
//System.out.println(result);
if(max < result) {
max = result;
}
//System.out.println(max);
}
}
//System.out.println();
sb.append(max).append("\n");
}
System.out.println(sb.toString());
}
}
D2_1948 날짜 계산기
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 날짜 계산기
public class D2_1948 {
private static int[] days = {31,28,31,30,31,30,31,31,30,31,30,31};
// 0 1 2 3 4 5 6 7 8 9 10 11 배열인덱스
// 1 2 3 4 5 6 7 8 9 10 11 12 월
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
sb.append("#").append(tc).append(" ");
st = new StringTokenizer(br.readLine(), " ");
int m1 = Integer.parseInt(st.nextToken());
int d1 = Integer.parseInt(st.nextToken());
int m2 = Integer.parseInt(st.nextToken());
int d2 = Integer.parseInt(st.nextToken());
int msum = 0; // 월 날짜수 합
int dsum = 0; // 일 날짜수 합
// 사이 월 일수 합
for (int i = m1; i < m2-1; i++) {
msum = msum + days[i];
}
// 해당 월 일수 합
if(m1!=m2) {
dsum = (days[m1-1]-d1) + d2 + 1;
}
else dsum = d2-d1 + 1;
// 월 일수, 일 일수 두개의 합 +1
sb.append(dsum+msum).append("\n");
}
System.out.println(sb.toString());
}
}
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 날짜 계산기
public class D2_1948 {
public static int[] days = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// 월 : 1 2 3 4 5 6 7 8 9 10 11 12
// 인덱스 : 0 1 2 3 4 5 6 7 8 9 10 11
public static int m1, d1, m2, d2;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
int result = 0;
for (int tc = 1; tc <= T; tc++) {
sb.append("#").append(tc).append(" ");
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
m1 = Integer.parseInt(st.nextToken());
d1 = Integer.parseInt(st.nextToken());
m2 = Integer.parseInt(st.nextToken());
d2 = Integer.parseInt(st.nextToken());
// 5 5 8 15
// 월이 같으면
if (m2 - m1 == 0) {
result = d2 - d1 + 1;
}
// 월이 다르면
else {
// 월 계산
for (int i = m1; i < m2-1; i++) { // 6 7
result = result + days[i];
}
// 일 계산
result = result + d2 + ( days[m1-1] - d1 ) + 1;
}
sb.append(result).append("\n");
result = 0;
}
System.out.println(sb.toString());
}
}
D2_1940 가랏! RC카!
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class D2_1940_supp {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine()); // 테스트케이스 수
for (int tc = 1 ; tc <= T ; tc++) {
sb.append("#").append(tc).append(" ");
int N = Integer.parseInt(br.readLine()); // 커맨드 수
int v = 0; // 현재 속도
int m = 0; // 자동차의 총 이동거리
for (int n = 0 ; n < N ; n++) {
String com = br.readLine(); // 0, 1 2, 2 2
switch (com.charAt(0)) {
case '0' :
// 현재 속도 유지
break;
case '1' :
// 가속
v = v + com.charAt(2) - '0';
break;
case '2' :
// 감속
v = v - com.charAt(2) - '0';
if(v<0) v = 0;
break;
}
m = m + v;
}
sb.append(m).append("\n");
}
System.out.println(sb);
}
}
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 가랏! RC카!
public class D2_1940 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
sb.append("#").append(tc).append(" ");
int N = Integer.parseInt(br.readLine());
int dist = 0;
int velo = 0;
for (int n = 0; n < N; n++) {
String str = br.readLine();
if (str.charAt(0)=='1') { // 명령 (0현재속도유지 1가속 2감속)
int accel = str.charAt(2) - '0'; // 가속도
velo = velo + accel;
dist = dist + velo;
}
else if (str.charAt(0)=='2') {
int accel = str.charAt(2) - '0'; // 가속도
velo = velo - accel;
if (velo < accel) {
velo = 0;
}
dist = dist + velo;
}
else if (str.charAt(0)=='0') {
dist = dist + velo;
}
}
sb.append(dist).append("\n");
}
System.out.println(sb.toString());
}
}
D2_1979 어디에 단어가 들어갈 수 있을까 (2021 09 01)
2차원 배열 탐색은 내 약점중 하나이니 다시 풀어보면서 익히면 좋을 것 같다
+ 좋은 아이디어를 내것으로 만드는 작업이 필요할 것 같다
package D2;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
// 어디에 단어가 들어갈 수 있을까
public class D2_1979_sol {
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 tk;
int t = Integer.parseInt(br.readLine());
for (int i = 1; i <= t; i++) {
tk = new StringTokenizer(br.readLine());
int n = Integer.parseInt(tk.nextToken());
int k = Integer.parseInt(tk.nextToken());
int[][] map = new int[n][n];
for (int p = 0; p < n; p++) {
tk = new StringTokenizer(br.readLine());
for (int q = 0; q < n; q++) {
map[p][q] = Integer.parseInt(tk.nextToken());
}
}
// 가로탐색
int ans = 0;
int cnt = 0;
for (int p = 0; p < n; p++) {
for (int q = 0; q < n; q++) { // 퍼즐 크기만큼 탐색
if (map[p][q] == 1) // 한 가로줄에 대해서 탐색 시작 (기준설정)
cnt = cnt + 1; // map[][]이 하얀색 블록이면 cnt++;
if (q == n - 1 || map[p][q] == 0) {
// 퍼즐의 가로가장자리에 도달하거나, 검은색 블록에 도달하면,
if (cnt == k) // 하얀색 블록이 k개였을 때,
ans = ans + 1; // ans++;
cnt = 0; // cnt 0으로 초기화
}
}
}
// 세로 탐색
int ans2 = 0;
int cnt2 = 0;
for (int p = 0; p < n; p++) {
for (int q = 0; q < n; q++) { // 퍼즐 크기만큼 탐색
if (map[q][p] == 1) // 한 세로줄에 대해서 탐색 시작 (기준설정)
cnt2 = cnt2 + 1; // map 이 하얀색 블록이면 cnt++;
if (q == n - 1 || map[q][p] == 0) {
// 퍼즐의 세로가장자리에 도달하거나, 검은색 블록에 도달하면,
if (cnt2 == k) // 하얀색 블록이 k개였을 때,
ans2 = ans2 + 1; // ans++;
cnt2 = 0; // cnt 0으로 초기화
}
}
}
bw.write("#" + i + " " + (ans + ans2) + "\n");
}
bw.flush();
bw.close();
} // main
} // class
// 제대로 안돌아감 주의
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
// 어디에 단어가 들어갈 수 있을까
public class SWEA_1979 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int TC = Integer.parseInt(br.readLine().trim());
for (int tc = 1; tc <= TC; tc++) {
sb.append("#").append(tc).append(" ");
st = new StringTokenizer(br.readLine().trim(), " ");
int N = Integer.parseInt(st.nextToken()); // 단어퍼즐 크기
int K = Integer.parseInt(st.nextToken()); // 단어의 길이
int[][] map = new int[N + 1][N + 1];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine().trim(), " ");
for (int j = 0; j < N; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
// System.out.println(Arrays.deepToString(map));
int count = 0;
for (int i = 0; i < N + 1; i++) {
for (int j = 0; j < N + 1; j++) {
if (map[i][j] == 0) {
if (i >= 0 && i < N - 1 && j >= 0 && j < N - 1) {
System.out.println("i,j : " + i + "," + j + " = " + map[i][j]);
for (int k = 1; k <= 3; k++) {
System.out.println("i,j+" + k + " : " + i + "," + (j + k) + " = " + map[i][j + k]);
if (map[i][j + k] == 1) {
if (k == 3) {
count = count + 1;
} else
continue;
} else
break;
if (map[j + k + 1][i] == 0) {
if (k == 2) {
count = count + 1;
} else
continue;
} else
break;
}
}
}
}
}
System.out.println(Arrays.deepToString(map));
sb.append(count).append("\n");
} // end of testcase
System.out.println(sb.toString());
} // end of main
} // end of class
D2_2007 패턴 마디의 길이
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 패턴 마디의 길이
public class D2_2007 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
sb.append("#").append(tc).append(" ");
String str = br.readLine();
int i;
for (i = 1; i <= 30; i++) {
if(str.substring(0, i).equals(str.substring(i, i+i))) {
break;
}
}
sb.append(i).append("\n");
}
System.out.println(sb.toString());
}
}
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 패턴 마디의 길이
public class D2_2007 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
sb.append("#").append(tc).append(" ");
String str = br.readLine();
int cnt = 0;
for (int i = 1; i < str.length(); i++) {
if(str.substring(0, i).equals(str.substring(i, i+i))) {
cnt++;
break;
}
else {
cnt++;
continue;
}
}
sb.append(cnt).append("\n");
}
System.out.println(sb.toString());
}
}
D2_1966 숫자를 정렬하자 (2021 09 01)
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
// 숫자를 정렬하자
public class D2_1966 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
sb.append("#").append(tc).append(" ");
int N = Integer.parseInt(br.readLine());
int[] nums = new int[N];
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < N; i++) {
nums[i] = Integer.parseInt(st.nextToken());
}
//System.out.println(Arrays.toString(nums));
//Arrays.sort(nums);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if(nums[i] < nums[j]) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}
for (int i = 0; i < N; i++) {
sb.append(nums[i]).append(" ");
}
sb.append("\n");
}
System.out.println(sb.toString());
}
}
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
// 숫자를 정렬하자
public class SWEA_1966 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int TC = Integer.parseInt(br.readLine().trim());
for (int tc = 1; tc <= TC; tc++) {
sb.append("#").append(tc).append(" ");
int N = Integer.parseInt(br.readLine().trim());
int[] nums = new int[N];
st = new StringTokenizer(br.readLine().trim(), " ");
for (int n = 0; n < N; n++) {
nums[n] = Integer.parseInt(st.nextToken());
}
//System.out.println(Arrays.toString(nums));
Arrays.sort(nums);
for (int i = 0; i < nums.length; i++) {
sb.append(nums[i]).append(" ");
}
sb.append("\n");
}
System.out.println(sb.toString());
}
}
D2_1961 숫자 배열 회전 (2021 09 02)
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
// 숫자 배열 회전 (2021 09 02)
public class SWEA_1961 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int TC = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= TC; tc++) {
sb.append("#").append(tc).append("\n");
int N = Integer.parseInt(br.readLine());
int[][] input = new int[N][N];
for (int n = 0; n < N; n++) {
st = new StringTokenizer(br.readLine(), " ");
for (int m = 0; m < N; m++) {
input[n][m] = Integer.parseInt(st.nextToken());
}
}
//System.out.println(Arrays.deepToString(input));
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
sb.append(input[N-1-j][i]);
}
sb.append(" ");
for (int j = 0; j < N; j++) {
sb.append(input[N-1-i][N-1-j]);
}
sb.append(" ");
for (int j = 0; j < N; j++) {
sb.append(input[j][N-1-i]);
}
sb.append("\n");
}
}
System.out.println(sb.toString());
}
}
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
// 숫자 배열 회전
public class D2_1961 {
public static int N;
public static int[][] arr;
public static int[][] arr90;
public static int[][] arr180;
public static int[][] arr270;
private static int[][] func90(int[][] arr) {
arr90 = new int[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
arr90[i][j] = arr[N-1-j][i];
}
}
/*for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
arr[i][j] = arr90[i][j];
}
}*/
return arr90;
}
private static int[][] func180(int[][] arr) {
arr180 = new int[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
arr180[i][j] = arr[N-1-i][N-1-j];
}
}
return arr180;
}
private static int[][] func270(int[][] arr) {
arr270 = new int[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
arr270[i][j] = arr[j][N-1-i];
}
}
return arr270;
}
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
sb.append("#").append(tc).append("\n");
N = Integer.parseInt(br.readLine());
arr = new int[N][N];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < N; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
//System.out.println(Arrays.deepToString(arr));
// 90, 180, 270도 회전 구현
func90(arr);
func180(arr);
func270(arr);
//System.out.println(Arrays.deepToString(arr90));
//System.out.println(Arrays.deepToString(arr180));
//System.out.println(Arrays.deepToString(arr270));
// 출력
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
sb.append(arr90[i][j]);
}
sb.append(" ");
for (int j = 0; j < N; j++) {
sb.append(arr180[i][j]);
}
sb.append(" ");
for (int j = 0; j < N; j++) {
sb.append(arr270[i][j]);
}
sb.append("\n");
}
}
System.out.println(sb.toString());
}
}
D2_1954 달팽이 숫자 (2021 09 02)
사방탐색 너무 어려워... 사실 deltas를 어떻게 쓰는지도 잘 모르는 것 같다...
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
// 달팽이 숫자 (2021 09 02)
public class SWEA_1954 {
// 좌, 하, 우, 상
static int[] dx = {-1, 0, 1, 0}; // j
static int[] dy = {0, 1, 0, -1}; // i
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int TC = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= TC; tc++) {
int N = Integer.parseInt(br.readLine());
int[][] arr = new int[N][N];
int num = 0;
int idx = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
arr[i][j] = num++;
if (i==N-1 || j==N-1 || i==0 || j==0 || arr[i][j]!=0) {
i = i + dy[idx];
j = j + dx[idx];
idx++;
}
}
}
System.out.println(Arrays.deepToString(arr));
}
}
}
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 달팽이 숫자
public class D2_1954_sol1 {
// 우,하,좌,상 (내가 탐색하고 싶은 순서대로)
public static int[] dx = { 0, 1, 0, -1 };
public static int[] dy = { 1, 0, -1, 0 };
public static int[] dd = { 0, 1, 2, 3 };
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
sb.append("#").append(tc).append(" ").append("\n");
int N = Integer.parseInt(br.readLine());
int[][] map = new int[N][N];
int n = 1, x = 0, y = 0, d = 0; // 디폴트 방향은 오른쪽(우 하 좌 상 순서)
while(n <= N * N) {
int X = x + dx[dd[d]];
int Y = y + dy[dd[d]];
if(X < 0 || X >= N || Y < 0 || Y >= N || map[X][Y] != 0) { // 꺾여야 하는 순간이 오면
d = (d + 1) % 4; // 방향 바뀜
X = x + dx[dd[d]];
Y = y + dy[dd[d]];
}
map[x][y] = n++;
x = X;
y = Y;
}
// 배열 출력
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
sb.append(map[i][j]).append(" ");
}
sb.append("\n");
}
}
System.out.println(sb.toString());
} // main
} // class
D2_1974 스도쿠 검증
package D2_review;
// 스도쿠 검증
public class SWEA_1974 {
public static void main(String[] args) {
}
}
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class D2_1974_supp2 {
public static int[][] m;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int TC = Integer.parseInt(br.readLine());
for (int testCase = 1; testCase <= TC; testCase++) {
sb.append("#").append(testCase).append(" ");
m = new int[9][9];
for (int i = 0; i < 9; i++) {
st = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < 9; j++) {
m[i][j] = Integer.parseInt(st.nextToken());
}
}
check();
sb.append(check()).append("\n");
}
System.out.println(sb.toString());
}
/** 해당 스도쿠가 정상인지 오류인지 체크 후 리턴하는 메서드 : 정상이면 1 오류면 0 */
public static int check() {
// 행, 열 검사
for (int i = 0; i < 9; i++) {
if(!checkRow(i) || !checkCol(i)) {
return 0;
}
}
// 블럭 검사
for (int i = 0; i < 9; i = i+3) {
for (int j = 0; j < 9; j = j+3) {
if(!checkBock(i,j)) {
return 0;
}
}
}
return 1;
}
/** 해당 섹션(3x3)을 체크, 정상이면 true 오류이면 false 를 리턴 */
private static boolean checkBock(int r, int c) {
boolean[] flag = new boolean[10];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if(flag[m[r+i][c+j]]) {
return false;
}
else {
flag[m[r+i][c+j]] = true;
}
}
}
return true;
}
/** 해당 열을 체크, 정상이면 true 오류이면 false를 리턴*/
private static boolean checkCol(int c) {
boolean[] flag = new boolean[10];
for (int i = 0; i < 9; i++) {
if(flag[m[i][c]]) {
return false;
}
else {
flag[m[i][c]] = true;
}
}
return true;
}
/** 해당 행을 체크, 정상이면 true 오류이면 false를 리턴*/
public static boolean checkRow(int r) {
boolean[] flag = new boolean[10];
for (int i = 0; i < 9; i++) {
if(flag[m[r][i]]) {
return false;
}
else {
flag[m[r][i]] = true;
}
}
return true;
}
}
D2_2001 파리 퇴치
package D2_review;
// 파리 퇴치
public class SWEA_2001 {
public static void main(String[] args) {
}
}
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
// 파리 퇴치
public class D2_2001 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
sb.append("#").append(tc).append(" ");
st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken()); // 맵크기
int M = Integer.parseInt(st.nextToken()); // 파리채크기
int[][] map = new int[N][N];
int[][] tool = new int[M][M];
for (int i = 0; i < map.length; i++) {
st = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < map[i].length; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
System.out.println(Arrays.deepToString(map));
int max = Integer.MIN_VALUE;
for (int i = 0; i < map.length-M+1; i++) { // for1
for (int j = 0; j < map[i].length-M+1; j++) { // for2
int sum = 0;
for (int a = 0; a < tool.length; a++) { // for3
for (int b = 0; b < tool[a].length; b++) { //for4
tool[a][b] = map[i+a][j+b];
sum = sum + tool[a][b];
}
}
System.out.println(Arrays.deepToString(tool));
if(sum > max) max = sum;
//System.out.println(max);
//System.out.println(sum);
}
}
sb.append(max).append("\n");
}
System.out.println(sb.toString());
} // main
} // class
D2_1976 시각 덧셈 (2021 09 07)
완성하려는 욕심을 버리고, 대신 플랫한 사고력 기르기 연습이 통한 느낌이 들었다..
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 시각 덧셈
public class SWEA_1976 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int TC = Integer.parseInt(br.readLine().trim());
for (int tc = 1; tc <= TC; tc++) {
sb.append("#").append(tc).append(" ");
st = new StringTokenizer(br.readLine().trim(), " ");
int h1 = Integer.parseInt(st.nextToken());
int m1 = Integer.parseInt(st.nextToken());
int h2 = Integer.parseInt(st.nextToken());
int m2 = Integer.parseInt(st.nextToken());
int subh = 0;
int subm = 0;
if (h1 + h2 > 12) {
subh = -12;
} else
subh = 0;
if (m1 + m2 > 60) {
subm = -60;
subh = 1;
} else
subm = 0;
sb.append(h1 + h2 + subh).append(" ").append(m1 + m2 + subm).append("\n");
}
System.out.println(sb.toString());
}
}
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 시각 덧셈
public class D2_1976 {
/*public static int hour1, min1, hour2, min2;
public static int hour, min;
public static int hour() {
hour = 0;
if(hour1 + hour2 > 12) {
hour = (hour1 + hour2) - 12;
}
else {
hour = hour1 + hour2;
}
return hour;
}
public static int min() {
min = 0;
if(min1 + min2 >= 60) {
min = (min1 + min2) - 60;
hour = (hour1 + hour2) + 1;
}
else {
min = min1 + min2;
}
return min;
}*/
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int N = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= N; tc++) {
sb.append("#").append(tc).append(" ");
st = new StringTokenizer(br.readLine(), " ");
int hour1 = Integer.parseInt(st.nextToken());
int min1 = Integer.parseInt(st.nextToken());
int hour2 = Integer.parseInt(st.nextToken());
int min2 = Integer.parseInt(st.nextToken());
int hour = hour1 + hour2;
int min = min1 + min2;
if(hour > 12) {
hour = hour - 12;
}
if(min >= 60) {
min = min - 60;
hour = hour + 1;
}
sb.append(hour).append(" ").append(min).append("\n");
}
System.out.println(sb.toString());
}
}
D2_2005 파스칼의 삼각형 (2021 09 06)
for 문을 되도록 많이 쓰지 않기 위해서 노력하고 있다!
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class SWEA_2005 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int TC = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= TC; tc++) {
sb.append("#").append(tc).append("\n");
int N = Integer.parseInt(br.readLine());
String[][] map = new String[N][N];
for (int n = 0; n < N; n++) {
for (int m = 0; m < N; m++) {
if (m==0 || m==n) {
map[n][m] = "1";
sb.append(map[n][m]).append(" ");
}
else if (m>n){
map[n][m] = " ";
sb.append(map[n][m]).append(" ");
}
else {
map[n][m] = Integer.toString(Integer.parseInt(map[n-1][m-1]) + Integer.parseInt(map[n-1][m]));
sb.append(map[n][m]).append(" ");
}
}
sb.append("\n");
}
}
System.out.println(sb.toString());
}
}
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 파스칼의 삼각형
public class D2_2005 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int TC = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= TC; tc++) {
sb.append("#").append(tc).append("\n");
int N = Integer.parseInt(br.readLine());
int[][] pascal = new int[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if(j==0 || i==j) {
pascal[i][j] = 1;
}
if(j>i) {
pascal[i][j] = 0;
}
if(j>0 && j<i && i>0 && i<N) {
pascal[i][j] = pascal[i-1][j-1] + pascal[i-1][j];
}
}
}
for (int i = 0; i < pascal.length; i++) {
for (int j = 0; j < pascal.length; j++) {
if(pascal[i][j]!=0) {
sb.append(pascal[i][j]).append(" ");
}
}
sb.append("\n");
}
}
System.out.println(sb.toString());
}
}
D2_1926 간단한 369게임 (2021 09 07)
지난번에도 지금도 잘 안풀어짐.. 다음 마지막 리뷰에선 꼭 풀 수 있길..
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
// 간단한 369게임
public class SWEA_1926 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine().trim());
String[] nums = {"3","6","9"};
for (int n = 1; n <= N; n++) {
/*int count = 0;
for (int i = 0; i < Integer.toString(n).length(); i++) {
for (int j = 0; j < nums.length; j++) {
if (Integer.toString(n).substring(i,i+1).equals(nums[j])) {
count++;
}
else sb.append(n).append(" ");
for (int j2 = 0; j2 < count; j2++) {
sb.append("-");
}
sb.append(" ");
}
}*/
if (n==3 || n==6 || n==9) {
sb.append("-").append(" ");
}
else sb.append(n).append(" ");
}
System.out.println(sb.toString());
}
}
package D2_review;
import java.util.Scanner;
//간단한 369게임
//https://m.blog.naver.com/angela7199/222023622199
//https://dheldh77.tistory.com/entry/SW-Expert-1926-%EA%B0%84%EB%8B%A8%ED%95%9C-369%EA%B2%8C%EC%9E%84
//https://dncjf64.tistory.com/253
public class SWEA_1926_sol {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int i = 1; i <= T; i++) {
int a = i / 10; // 몫
int b = i % 10; // 나머지
if (a == 3 || a == 6 || a == 9) {
if (b == 3 || b == 6 || b == 9) {
System.out.print("-- ");
continue;
}
System.out.print("- ");
} else if (b == 3 || b == 6 || b == 9)
System.out.print("- ");
else {
System.out.print(i + " ");
}
}
}
}
D2_1970 쉬운 거스름돈 (2021 09 06)
전체를 보는 시각도 중요하지만 단편적인 사고가 중요함을 알게 된 문제
ex) i 값이 0일때, value/money[i] 후 떨어지는 값은? value%money[i] 후 떨어지는 값은? 그걸 어떻게 이용?
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 1970 쉬운 거스름돈
public class SWEA_1970 {
public static int[] money = {50000, 10000, 5000, 1000, 500, 100, 50, 10};
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int TC = Integer.parseInt(br.readLine().trim());
for (int tc = 1; tc <= TC; tc++) {
sb.append("#").append(tc).append(" ");
int value = Integer.parseInt(br.readLine().trim());
int[] result = new int[money.length];
for (int i = 0; i < money.length; i++) {
result[i] = value / money[i];
value = value % money[i];
sb.append(result[i]).append(" ");
}
sb.append("\n");
}
System.out.println(sb.toString());
}
}
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 쉬운 거스름돈
public class D2_1970 {
public static int[] money = {50000, 10000, 5000, 1000, 500, 100, 50, 10};
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
sb.append("#").append(tc).append("\n");
int N = Integer.parseInt(br.readLine());
int[] amount = new int[8];
int n = 0;
for (int i = 0; i < money.length; i++) {
n = N/money[i];
if (n == 0) continue;
if (n != 0) {
amount[i] = n;
N = N - n*money[i];
}
}
for (int i = 0; i < amount.length; i++) {
sb.append(amount[i]).append(" ");
}
sb.append("\n");
}
System.out.println(sb.toString());
}
}
D2_1983 조교의 성적 매기기
// 안돌아감
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
// 조교의 성적 매기기
public class SWEA_1983 {
public static String[] result = { "A+", "A0", "A-", "B+", "B0", "B-", "C+", "C0", "C-", "D0" };
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int TC = Integer.parseInt(br.readLine().trim());
for (int tc = 1; tc <= TC; tc++) {
sb.append("#").append(tc).append(" ");
st = new StringTokenizer(br.readLine().trim(), " ");
int N = Integer.parseInt(st.nextToken()); // 학생 수
int K = Integer.parseInt(st.nextToken()); // 학점을 알고 싶은 학생의 번호
// scores 배열에 값을 넣어주는 과정
float[] scores = new float[N];
String[] hj = new String[N];
for (int n = 0; n < scores.length; n++) {
st = new StringTokenizer(br.readLine().trim(), " ");
int mid = Integer.parseInt(st.nextToken());
int fin = Integer.parseInt(st.nextToken());
int ass = Integer.parseInt(st.nextToken());
scores[n] = (float) (mid * 0.35 + fin * 0.45 + ass * 0.20);
}
System.out.println(Arrays.toString(scores));
// scores 배열에 넣어준 값에 따라 학점을 부여하는 과정
for (int i = 0; i < result.length; i++) {
for (int j = 0; j < N / 10; j++) {
float max = 0;
for (int k = 0; k < scores.length; k++) {
if (max < scores[k]) {
max = scores[k];
scores[k] = 0;
hj[k] = result[i];
}
}
}
}
System.out.println("scores : " + Arrays.toString(scores));
System.out.println("hj : " + Arrays.toString(hj));
// scores 배열에서 K 값을 찾아서 출력해주는 과정
sb.append(hj[K-1]).append("\n");
}
System.out.println(sb.toString());
}
}
package D2;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Scanner;
// 조교의 성적 매기기
public class D2_1983_sol {
public static String[] scores = {"A+", "A0", "A-", "B+", "B0", "B-", "C+", "C0", "C-", "D0"};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int tc = 1; tc <= T; tc++) {
int N = sc.nextInt(); // 학생 수
int K = sc.nextInt(); // 알고싶은 학생의 번호
double find_score = 0.0;
Double[] result = new Double[N];
// 입력받기
for (int i = 0; i < N; i++) {
int mid_socre = sc.nextInt(); // 중간고사 점수
int final_score = sc.nextInt(); // 기말고사 점수
int sub_score = sc.nextInt(); // 과제 점수
double sum = 0.35*mid_socre + 0.45*final_score + 0.20*sub_score;
result[i] = sum;
// 찾고싶은 점수를 find_score 변수에 아예 저장해버린다
if(i+1 == K) find_score = sum;
}
// result 배열 내림차순으로 정렬한다
Arrays.sort(result, Collections.reverseOrder());
// result 배열을 돌면서
// result[i] 값이 find_score 값과 같다면
// 그 인덱스를 index 변수에 저장한다
int index = 0;
for (int i = 0; i < result.length; i++) {
if(result[i] == find_score) {
index = i;
}
}
// 받은 index 값으로 이제 scores 에 접근할 생각이다
// (N/10)을 해주어야 하는 이유는 같은 점수를 부여해 줄 수 있는 사람 수를 적용하기 위함이다
// 근데 이 수식은 이해가 안간다...
// 간다...
// 내가 만약 8등이면
// 10명으로 구성된 반에선 8등
// 20명으로 구성된 반에서는 8/(20/10)=8/2=4등
// 1,2등이 1등, 3,4,등이 2등, 5,6등이 3등, 7,8등이 4등...
index = index / (N/10);
System.out.printf("#%d %s\n", tc, scores[index]);
}
}
}
D2_1946 간단한 압축 풀기 (2021 09 07)
package D2_review;
// 간단한 압축 풀기
public class SWEA_1946 {
public static void main(String[] args) {
}
}
package D2;
import java.io.*;
import java.util.StringTokenizer;
// 간단한 압축 풀기
public class D2_1946_sol {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
sb.append("#").append(tc).append("\n");
int N = Integer.parseInt(br.readLine()); // 알파벳 갯수
char[] c = new char[N]; // 해당 알파벳 저장
int[] num = new int[N]; // 해당 알파벳 갯수 저장
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
c[i] = st.nextToken().charAt(0);
num[i] = Integer.parseInt(st.nextToken());
}
int cnt = 0; // 출력 횟수
for (int i = 0; i < N; i++) {
for (int j = 0; j < num[i]; j++) {
sb.append(c[i]);
cnt++;
if (cnt == 10) {
sb.append("\n");
cnt = 0;
}
}
}
sb.append("\n");
}
System.out.println(sb.toString());
}
}
D2_1984 중간 평균값 구하기 (2021 09 07)
package D2_review;
// 중간 평균값 구하기
public class SWEA_1984 {
public static void main(String[] args) {
}
}
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
// 중간 평균값 구하기
public class D2_1984 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int T = Integer.parseInt(br.readLine());
int[] nums = new int[10];
for (int tc = 1; tc <= T; tc++) {
sb.append("#").append(tc).append(" ");
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < 10; i++) {
nums[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(nums);
nums[0] = 10001;
nums[9] = 10001;
int sum = 0;
double result = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i]>=0 && nums[i]<=10000) {
sum = sum + nums[i];
}
else continue;
}
result = Math.round(sum/8.0);
sb.append((int)result).append("\n");
} // end of tc
System.out.println(sb.toString());
} // end of main
} // end of class
D2_1204 최빈수 구하기 (2021 09 07)
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
// 최빈수 구하기
public class SWEA_1204 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int TC = Integer.parseInt(br.readLine().trim()); // 테스트 케이스 갯수
for (int tc = 1; tc <= TC; tc++) {
int[] check = new int[101];
sb.append("#").append(tc).append(" ");
int N = Integer.parseInt(br.readLine().trim()); // 테스트 케이스 번호
String[] scores = br.readLine().split(" ");
for (int i = 0; i < scores.length; i++) {
check[Integer.parseInt(scores[i])]++;
}
//Arrays.sort(scores);
//System.out.println(Arrays.toString(scores));
//System.out.println(Arrays.toString(check));
int max = check[0];
int idx = 0;
for (int i = 0; i < check.length-1; i++) {
if (max < check[i]) {
max = check[i];
idx = i;
}
else continue;
}
//System.out.println(max);
sb.append(idx).append("\n");
}
System.out.println(sb.toString());
}
}
package D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;
// 최빈수 구하기
public class D2_1204_sol {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int TC = Integer.parseInt(br.readLine()); // 테스트케이스 갯수
for (int tc = 1; tc <= TC; tc++) {
sb.append("#").append(tc).append(" ");
int N = Integer.parseInt(br.readLine()); // 테스트케이스 번째
int[] scores = new int[1000]; // 점수 저장
int[] frequency = new int[101]; // 빈도 저장
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < 1000; i++) {
scores[i] = Integer.parseInt(st.nextToken()); // 점수 입력받음
frequency[scores[i]]++; // 점수에 해당하는 인덱스 값에 1 더해줌
}
// 최빈수 구하기
int max = Integer.MIN_VALUE;
int index = 0;
for (int i = 0; i < frequency.length; i++) {
if(max <= frequency[i]) {
max = frequency[i];
index = i;
}
}
sb.append(index).append("\n");
}
System.out.println(sb.toString());
}
}
D2_1859 백만 장자 프로젝트
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
// 백만 장자 프로젝트
public class D2_1859 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int TC = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= TC; tc++) {
sb.append("#").append(tc).append(" ");
int N = Integer.parseInt(br.readLine()); // 날짜
int[] prices = new int[N];
st = new StringTokenizer(br.readLine(), " ");
for (int n = 0; n <N ; n++) {
prices[n] = Integer.parseInt(st.nextToken());
}
//System.out.println(Arrays.toString(prices));
int max = prices[N-1];
int result = 0;
for (int i = N-2; i >= 0; i--) {
if (prices[i]>max) {
max = prices[i];
//System.out.println(tc + "테케 max : " + max);
}
result = result + (max - prices[i]);
//System.out.println(tc + "테케 result : " + result);
}
sb.append(result).append("\n");
} // end of testcase
System.out.println(sb.toString());
} // end of main
} // end of class
package D2_review;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백만 장자 프로젝트
public class D2_1859_sol2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
// 테스트케이스 수
int TC = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= TC; tc++) {
// 매매가 수 = 날짜 수
int N = Integer.parseInt(br.readLine());
// 매매가 저장 = 각 날짜에 대한 매매가 저장
int[] prices = new int[N];
String[] input = br.readLine().split(" ");
for (int i = 0; i < N; i++) {
prices[i] = Integer.parseInt(input[i]);
}
// max 에 최고 매매가 저장 = 마지막 날 매매가
// ans 에
int max = prices[N - 1];
long answer = 0;
// 최고 매매가 바로 전날 매매가부터 반복수행
for (int i = N - 2; i >= 0; i--) {
// 당일 매매가가 최고 매매가보다 작으면
// 차이값을 answer 에 저장
if (max > prices[i]) {
answer += max - prices[i];
// 당일 매매가가 최고 매매가보다 작지 않으면
// 최고 매매가를 바꿔줌
} else {
max = prices[i];
}
}
// 출력
sb.append("#" + tc + " " + answer + "\n");
}
System.out.print(sb.toString());
}
}
테스트케이스 텍스트파일이 너무 커서 제대로 파일이 켜지지 않아서 SW Expert Academy에 있는 input으로만 테스트를 돌렸을 때는 문제가 없었다. 그런데 그걸 SW Expert Academy에 올리니까 테스트케이스 10개 중 7개만 맞는 Fail이 계속 발생했다.. 아직까지도 그 이유를 잘 모르겠다.. 솔루션 파일이랑 입력만 다르고 다른 로직은 모두 똑같이 맞춰 주었는데도 동일한 Fail이 떠서 우선 중지 하기로 했다. 다음 이차 리뷰를 하게 된다면 다시 풀어보면 좋을 것 같다.
리뷰하기 전과 다른 점이라면 아이디어가 이미한번 습득된 상태여서 그런지 문제가 이해도 되고 착안도 되었다. 그리고 분명 로직을 작성할 때까지만 해도 Pass 할것이라고 호언장담 했는데 이럴수가.. 역시 사람은 겸손해야한다..
'ALGORITHM > SWEA' 카테고리의 다른 글
[SWEA D3] 13218. 조별과제 (0) | 2023.03.29 |
---|---|
[SWEA D3] 12368. 24시간 (0) | 2023.03.28 |
[SWEA D1] 자바 깔짝 (0) | 2023.03.27 |
[Algorithm Study] D4_3234 준환이의 양팔저울 (0) | 2021.09.01 |
[Algorithm Study] D3_5215 햄버거 다이어트 (0) | 2021.08.31 |