Algorithm/문제 풀이 / / 2020. 5. 1. 21:13

[SWEA_4366 - JAVA] 정식이의 은행업무

반응형

문제

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWMeRLz6kC0DFAXd

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

풀이

  • 2진수& 3진수를 배열형태로 변환.
  • 10진수값으로 비교 -> decimalConversion 함수 생성
  • 2진수의 경우 0 -> 1 , 1 -> 0 으로 변환. (최초의 숫자는 틀렸다는 가정이므로 변환 횟수는 1번)
    3진수의 경우 0 ->1 , 1 -> 2 , 2->0 으로 변환. ( 최초의 숫자는 틀렸다는 가정이므로 변환 횟수는 2번)
  • 변환되는 값들을 새로운 배열에 10진수로 저장.
  • 모든 값들을 비교 일치하는 십진수가 있다면, 출력.
    -> 3진수의 경우 2가지이므로 2중 for문 안에 for문 추가.

 

 

JAVA 코드

package SWEA_200501;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Solution_D4_4366_정식이의은행업무 {

	public static int decimalConversion(int[] arr, int type) {
		int ret = 0;
		for (int i = 0; i < arr.length; i++) {
			ret += Math.pow(type, arr.length - 1 - i) * arr[i];
		}
		return ret;
	}

	public static int search(int[] binaryArr, int[] ternaryArr) {
		// 변환되는 2진수, 3진수 보관
		int[] retBinary = new int[binaryArr.length]; // 0,1 두가지 -> 1번만 변환
		int[][] retTernary = new int[ternaryArr.length][2]; // 0,1,2 세가지 -> 2번 변환

		// 2진수 변환
		for (int i = 0; i < binaryArr.length; i++) {
			int[] nextBinary = binaryArr.clone(); // 복사
			
			if (binaryArr[i] == 0) { // 0인 경우
				nextBinary[i] = 1;
			} else {				 // 1인 경우
				nextBinary[i] = 0;
			}
			retBinary[i] = decimalConversion(nextBinary, 2); // 십진수 값
		}

		// 3진수 변환
		for (int i = 0; i < ternaryArr.length; i++) {
			int[] nextTernary = ternaryArr.clone(); // 복사
			
			for (int cnt = 0; cnt < 2; cnt++) { // 2번 반복 (0 -> 1, 1 -> 2, 2 -> 0)
				if (nextTernary[i] == 0) { 		 // 0인 경우
					nextTernary[i] = 1;
				} else if (nextTernary[i] == 1) {// 1인 경우
					nextTernary[i] = 2;
				} else { 					     // 2인 경우
					nextTernary[i] = 0;
				}
				retTernary[i][cnt] = decimalConversion(nextTernary, 3);
			}
		}

		// 같은 경우 탐색
		for (int i = 0; i < binaryArr.length; i++) {
			for (int j = 0; j < ternaryArr.length; j++)
				for (int cnt = 0; cnt < 2; cnt++)
					if (retBinary[i] == retTernary[j][cnt]) // 같은 경우
						return retBinary[i];

		}

		return 0;
	}

	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 test = 1; test <= tc; test++) {
			String binary = br.readLine();
			String ternary = br.readLine();

			// 2진수 3진수로 배열에 담는 과정
			int[] binaryArr = new int[binary.length()];
			int[] ternaryArr = new int[ternary.length()];

			for (int i = 0; i < binary.length(); i++) {
				binaryArr[i] = binary.charAt(i) - '0';
			}
			for (int i = 0; i < ternary.length(); i++) {
				ternaryArr[i] = ternary.charAt(i) - '0';
			}

			sb.append("#" + test + " " + search(binaryArr, ternaryArr) + "\n");
		} // end of testcase
		System.out.println(sb);
	}// end of main

}

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유