TIL 20210106 알고리즘

NOAH·2021년 1월 6일
1

알고리즘 첫 번째 문제 (참고용)

참고

import java.util.*;
public class Main{
	public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		int a, b;
		a = sc.nextInt();
		b = sc.nextInt();
		System.out.println(a + b);
	}
}

의문점

import java.util.*; 가 의미 하는 것은 무엇일까?

Scanner 란?



알고리즘 두 번째 문제

처음에는 a의b제곱해서 10으로 나누면 되는거 아니야?
하지만, 너무 큰 수가 나와서 다른 방법을 찾기로 했다.
그러다가 규칙을 발견 했는데 제곱수의 끝자리가 반복된다.

2 4 16 64 128 512 1024 ... -> 2, 4, 6, 8
3 9 27 81 243 .... > 3, 9, 7, 1
4 16 64 256 1024 -> 4, 6
5 25 125 625 ... -> 5
6 36 216 ... ->6
7 49 343 2401 ... -> 7, 9, 3, 1
8 64 512 4096 ....-> 8, 4, 2, 6
9 81 729 ...1 -> 9, 1

어떤 일정 주기가 발견 되었고, 10으로 나누어 주었을 때 나머지 값이 마지막 데이터를 계산하고 있는 컴퓨터의 순서 이므로 자바의 나머지 연산자 : %
를 이용하기로 했다.

import java.util.*;

public class Algorithms02 {
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        int t;
        t = sc.nextInt();
        ArrayList<Integer> result = new ArrayList<>();

        for( int i = 0 ; i < t ; i ++ ) {
            int a, b, computerN;
            a = sc.nextInt();
            b = sc.nextInt();

            int computer[] = {};

            switch(a % 10) { // a를 10으로 나눈 나머지가
                case 0 :
                    computerN = 10;
                    result.add(computerN);
                    break;
                case 1 :
                    computerN = 1;
                    result.add(computerN);
                    break;
                case 2 :
                    int[] pattern2 = new int[]{6,2,4,8}; // 2의 제곱수들의 앞자리 패턴

                    int remainder2 = (b % 4) ;
                    computerN = pattern2[remainder2];
                    result.add(computerN);
                    break;
                case 3 :
                    int[] pattern3 = new int[]{1,3,9,7}; // 3의 제곱수들의 앞자리 패턴
                    int remainder3 = (b % 4) ;
                    computerN = pattern3[remainder3];
                    result.add(computerN);
                    break;
                case 4 :
                    int[] pattern4 = new int[]{6,4}; // 4의 제곱수들의 앞자리 패
                    int remainder4 = (b % 2) ;
                    computerN = pattern4[remainder4];
                    result.add(computerN);
                    break;
                case 5 :
                    computerN = 5;// 5일 때는 항상 5
                    result.add(computerN);
                    break;
                case 6 :
                    computerN = 6; // 6일 때도 항상 6
                    result.add(computerN);
                    break;
                case 7 :
                    int[] pattern7 = new int[]{1,7,9,3}; // 7의 제곱수들의 앞자리 패
                    int remainder7 = (b % 4) ;
                    computerN = pattern7[remainder7];
                    result.add(computerN);
                    break;
                case 8 :
                    int[] pattern8 = new int[]{6,8,4,2}; // 8의 제곱수들의 앞자리 패턴

                    int remainder8 = (b % 4) ; //
                    computerN = pattern8[remainder8];
                    result.add(computerN);
                    break;
                case 9 :
                    int[] pattern9 = new int[]{1,9}; // 9의 제곱수들의 앞자리 패
                    int remainder9 = (b % 2);
                    computerN = pattern9[remainder9];
                    result.add(computerN);
                    break;
            }
            }
        for(int k=0; k<result.size(); k++){
            System.out.println(result.get(k));
        }

    }}

참고자료
Arraylist 사용하기 - 생활코딩
백준 1009 풀이
switch - case statement



알고리즘 세번째 문제보기

첫번째 접근

1,2,3번째 값들을 모두 배열을 지정해주고,
입력값(scanner)을 받아서 (첫번째 값 10 + 두번째 값) 마지막 값을 계산해서 출력해주는 식으로 소스를 짜려고 하면 좋을 것 같다. 어떻게 해야 할까?

string - > int 로 바꾸기 : parseint 문법 개념

1개의 댓글

comment-user-thumbnail
2021년 1월 7일

앗 노아 블로그 찾았다😆 어제 알고리즘 푸느라 고생 많으셨어요!!

답글 달기