한 걸음 두 걸음
baekjoon 6504번 계산 구현문제 ] 문자열, 진법 본문
반응형
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int testCase = sc.nextInt();
int kmValue[] = new int [testCase];
int result[] = new int [testCase];
//피보나치수열값을 미리 만들어둡시다!
int arrayF[] = new int [22]; //최대값이 25000이므로 22까지만 생성합니다.
arrayF[0] = 1; arrayF[1] = 2;
for(int i = 2; i < 22; i++) {
arrayF[i] = arrayF[i-1] + arrayF[i-2];}
//km값으로 입력받고 피보진법 변환 후 마일 값으로 바꿔서 출력합니다.
for(int i = 0 ; i < testCase ; i++ ) {
kmValue[i] = sc.nextInt();
String fivoStr = makeFivo(kmValue[i] , arrayF);
result[i] = toMile(fivoStr, arrayF);
System.out.println(result[i]);
}
}
//피보진법으로 나타낼께요
static String makeFivo(int kmValue, int[] arrayF) {
StringBuilder fivoStr = new StringBuilder("");
int index = 21;
while(index > 0) { //어차피 맨 마지막 비트 버릴거라서 계산에서 빼버림
if(kmValue / arrayF[index] >= 1) { fivoStr.append("1"); kmValue %= arrayF[index];}
else fivoStr.append("0");
index--;
}
String returnStr = fivoStr.toString();
return returnStr;
}
//피보진법을 받아와 마일로 계산하는 함수입니다.
static int toMile(String fivoStr, int[] arrayF) {
int resultMile = 0;
for(int j = 0; j < 21; j++) {
if(fivoStr.charAt(j)=='1') resultMile += arrayF[20-j];
}
return resultMile;
}
}
반응형
'CSE > baekjoon & swexpert' 카테고리의 다른 글
백준 15740 & 10757 ] 큰 수 덧셈하기 (0) | 2019.03.07 |
---|---|
백준 1018 체스판 다시 칠하기 ] 브루트포스 / 배열 JAVA (0) | 2019.02.23 |
baekjoon 2902번 문자열처리 ] 아스키코드 (0) | 2019.02.21 |
baekjoon 11365번 문자열처리 ] 문자열비교 및 reverse함수사용 (0) | 2019.02.21 |
백준 16435번 스네이크버드문제 ] int배열 정렬 (0) | 2019.02.18 |