알고리즘/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