알고리즘 기초 2/1 - 303

lejehwan·2022년 2월 16일
0

baekjoon

목록 보기
6/8

303 - 수학 1 (참고)


진법 변환2 - 11005

나의 풀이

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

public class Main {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		String[] input = br.readLine().split(" ");
		int n = Integer.parseInt(input[0]);
		int m = Integer.parseInt(input[1]);
		char[] ch = new char[36];
		for (int i = 0; i < ch.length; i++) {
			if (i < 10) {
				ch[i] = (char) (i + '0');
			} else {
				ch[i] = (char) (i + 'A' - 10);
			}
		}
		while (n > 0) {
			sb.append(ch[n % m]);
			n /= m;
		}
		System.out.println(sb.reverse());
	}
}

아스키 코드를 활용해서 범위에 따라 숫자와 문자를 넣음


진법 변환 - 2745

나의 풀이

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

public class Main {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] input = br.readLine().split(" ");
		String[] n = input[0].split("");
		int m = Integer.parseInt(input[1]);
		char[] ch = new char[36];
		for (int i = 0; i < ch.length; i++) {
			if (i < 10) {
				ch[i] = (char) (i + '0');
			} else {
				ch[i] = (char) (i + 'A' - 10);
			}
		}
		int answer = 0;
		for (int i = 0; i < n.length; i++) {
			int temp = 0;
			for (int j = 0; j < ch.length; j++) {
				if (n[i].equals(String.valueOf(ch[j]))) {
					temp = j;
					break;
				}
			}
			answer += Math.pow(m, n.length - i - 1) * temp;
		}
		System.out.println(answer);
	}

}

전 문제와 같지만 반대로 풀면 됨


Base Conversion - 11576

나의 풀이

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;

public class Main {
	static Stack<Integer> stack = new Stack<Integer>();

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] conV = br.readLine().split(" ");
		int conA = Integer.parseInt(conV[0]);
		int conB = Integer.parseInt(conV[1]);
		int m = Integer.parseInt(br.readLine());
		int temp = conversionA(br.readLine().split(" "), conA);
		conversionB(temp, conB);
		int size = stack.size();
		for (int i = 0; i < size; i++) {
			System.out.print(stack.pop() + " ");
		}
	}

	public static int conversionA(String[] temp, int conA) {
		int value = 0;
		for (int i = 0; i < temp.length; i++) {
			value += (int) Math.pow(conA, temp.length - 1 - i) * Integer.parseInt(temp[i]);
		}
		return value;
	}

	public static void conversionB(int temp, int conB) {
		while (temp != 0) {
			stack.add(temp % conB);
			temp /= conB;
		}
	}
}

A진법을 10진수로 변환 후 B진수로 변환 하는데 역순으로 출력하기 위해 스택 활용


소인수 분해 - 11653

나의 풀이

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

public class Main {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int n = Integer.parseInt(br.readLine());
		int i = 2;
		while (n != 1) {
			if (n % i == 0) {
				sb.append(i + "\n");
				n /= i;
			} else {
				i++;
			}
		}
		System.out.println(sb.toString());
	}
}

2로 나누어 떨어지면 또 2로 나누기 때문에 소수를 구할 필요없이 알아서 배수는 걸러짐 따라서 2부터 차례로 나눠보면 됨


진법 변환이나 소수 구하는 방법을 잘 알고 있을 테니 패스

profile
hello world:)

0개의 댓글