본문 바로가기

Java/알고리즘63

최대공약수와 최소공배수 간만에 들어보는 최대공약수와 최소공배수 최대공약수는 유클리드 호제법을 사용했다. 3%12 = 3 다음으로 m을 n의자리로, 나머지를 m의자리로 보내고 계속해서 나머지를 구한다. 그렇게 했을때, 나머지가 0이 될 때 m이 최대공약수가 된다. 다른 예를 보자. n = 20, m = 14 일때 이렇게 되면 나머지가 0이될때의 m의자리는 2이니, 최대공약수는 2가 된다. 최소공배수는 (n * m) / 최대공약수 하면 나온다. ㅇ 풀이 public int[] solution(int n, int m) { int[] answer = new int[2]; int a1 = n; int a2 = m; while(a2 != 0){ int temp = a1 % a2; a1 = a2; a2 = temp; } answer[0] .. 2024. 2. 6.
3진법 뒤집기 주어진 Int n을 3진법으로 표현후, 뒤집고, 다시 10진법으로 변환하면된다. ㅇ 풀이 public int solution(int n) { int answer = 0; //int n 을 3진수로 변환 String th = Integer.toString(n,3); //변환한 n인 th를 뒤집어서 담을 ht String ht = ""; //th를 뒤집는다. for(int i = th.length()-1; i >= 0; i--){ ht += th.charAt(i); } //3진수인 ht를 다시 10진수로 변환한다. answer = Integer.parseInt(ht,3); return answer; } 진수변환하는걸 사실 까먹어서 찾아봤다. 잊지말자! 2024. 2. 5.
직사각형 별찍기 ㅇ 풀이 class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); String star = "*"; String Star = ""; int i = 0; while(i < a){ Star += star; i++; } for(int j = 0; j < b; j++){ System.out.println(Star); } } } 먼저 *를 a만큼 붙혀보자. while문을 통해서 star를 a개를 붙히고, b만큼 출력을하면된다. 쏘 이지. 2024. 2. 2.
행렬의 덧셈 같은 인덱스끼리의 덧셈을 구하는 간단한 문제다. 이중for문 써서 풀면되는문제다. 주의할점은 첫번째 for문에서는 arr1이나 arr2의 '행'길이 전까지 반복해야하고, 두번째for문에선 arr1 이나 arr2의 '열'길이만큼 반복해야한다는것이다. 내가이걸 잘못설정해서 30분동안 뭐지?뭐지?했다. ㅇ 풀이 public static int[][] solution(int[][] arr1, int[][] arr2) { int[][] answer = new int[arr1.length][arr1[0].length]; for(int i = 0; i < arr1.length; i++){ for(int j = 0; j < arr1[0].length; j++){ answer[i][j] = arr1[i][j]+arr2.. 2024. 2. 1.