알고리즘/SWEA

[Java] SWEA 4530번 극한의 청소 작업

컴공맨 2021. 5. 4. 14:01
 

SW Expert Academy

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

swexpertacademy.com


풀이

4는 없는 숫자이므로 10진수에서 4가 빠진 9진수로 바꾸어 해결했습니다.

코드에 설명을 써놓았습니다.


코드

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

public class Solution {
	public static long answer;
	public static String A, B;
	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) {
			st = new StringTokenizer(br.readLine(), " ");
			
			A = st.nextToken();
			B = st.nextToken();
			
			long tenA = convert(A);
			long tenB = convert(B);
			
			if (tenA < 0 && tenB > 0) {
				// 0층은 없으므로 1을 빼야한다.
				answer = tenB - tenA - 1;
			}
			else {
				// B는 A보다 항상 높으므로
				answer = tenB - tenA;
			}
			
			sb.append("#").append(tc).append(" ").append(answer).append("\n");
		}
		
		System.out.println(sb);
	}
	
	public static long convert(String num) {
		boolean isMinus = false;
		int start = 0;
		
		// 음수일 경우 계산의 편의를 위해 isMinus 플래그를 true로 바꾸고
		// num의 시작을 '-'를 제외한 자리부터 하도록 바꿈
		if (num.charAt(0) == '-') {
			isMinus = true;
			start = 1;
		}
		
		long idx = 0;
		long result = 0;
		for (int i = num.length() - 1; i >= start; i--) {
			int cur = num.charAt(i) - '0'; 
			
			// 9진수로 계산할 때 4는 없는 숫자이므로
			// 4보다 큰 수들은 -1을 해준다.
			if (cur > 4) {
				cur -= 1;
			}
			
			// 해당 자리수의 9진수로 바꾸어준다.
			// n * (9 ^ idx)
			result += cur * (long)Math.pow(9, idx++);
		}
		
		// 음수 였다면 -를 붙여서 반환
		return isMinus ? -result : result;
	}
}

 

pyo7410/Algorithm

1일 1커밋을 목표로! Contribute to pyo7410/Algorithm development by creating an account on GitHub.

github.com