200930 수 [BOJ] 11576, 2745, 11005

kyuhyun·2020년 9월 30일
0

1일1고리즘

목록 보기
17/20

BOJ 11576

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
import java.util.StringTokenizer;

public class Main {	

	
    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 st = new StringTokenizer(br.readLine());
    	int A = Integer.parseInt(st.nextToken());
    	int B = Integer.parseInt(st.nextToken());
    	
    	int m = Integer.parseInt(br.readLine());
    	
    	st = new StringTokenizer(br.readLine());
    	
    	int decimalNum = 0;
    	for(int i=0;i<m;i++) {
    		decimalNum += Integer.parseInt(st.nextToken()) * Math.pow(A, m-i-1);
    	}
    	
    	Stack<Integer> stack = new Stack<>();
    	
    	while(decimalNum != 0) {
    		stack.push(decimalNum%B);
    		decimalNum /= B;
    	}
    	int size = stack.size();
    	for(int i=0;i<size;i++){
    		bw.write(stack.pop() + " ");
    	}
       	bw.flush();    	
    	bw.close();
    }
}

StackMath.pow() 사용하여 해결.


BOJ 2745

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
import java.util.StringTokenizer;

public class Main {	

	
    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 st = new StringTokenizer(br.readLine());
    	String N = st.nextToken();
    	int B = Integer.parseInt(st.nextToken());
    	
    	char[] arr = N.toCharArray();
    	
    	Stack<Integer> stack = new Stack<>();
    	for(int i=0;i<arr.length;i++) {
    		if(arr[i] > 47 && arr[i] < 58) {
    			stack.push(arr[i] - 48);
    		} else if (arr[i] > 64 && arr[i] < 91) {
    			stack.push(arr[i] - 55);
    		}
    	}
    	
    	int decimalNum = 0;
    	int size = stack.size();
    	for(int i=0;i<size;i++) {
    		decimalNum += Math.pow(B, i) * stack.pop();
    	}
    	bw.write(String.valueOf(decimalNum));
    	
       	bw.flush();    	
    	bw.close();
    }
}

정말 오랜만에 첫 제출에 맞았습니다!!를 받았다..😭


BOJ 11005

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;

public class Main {	

	
    public static void main(String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    	String[] input = br.readLine().split(" ");
    	
    	int N = Integer.parseInt(input[0]);
    	int B = Integer.parseInt(input[1]);
    	
    	Stack<Integer> stack = new Stack<>();
    	while(N != 0) {
    		stack.push(N % B);
    		N /= B;
    	}
    	int size = stack.size();
    	for(int i=0;i<size;i++) {
    		if(stack.peek() < 10) {
    			bw.write(stack.pop() + 48);
    		} else if (stack.peek() >= 10) {
    			bw.write(stack.pop() + 55);
    		}
    	}
    	
       	bw.flush();    	
    	bw.close();
    }
}

StringBuilder 클래스의 append()와 마지막 출력 시 reverse()를 사용해서 훨씬 더 간단하게 코드를 짤 수 있었다.
잘하는 사람들이 참 많군..

profile
알고리즘은 즐거워

0개의 댓글