scone-lemon

D2 review 본문

ALGORITHM/SWEA

D2 review

lemon-scone 2021. 8. 14. 23:50

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