[TIL] 1월 6일

yeon·2021년 1월 6일
0
post-custom-banner

오늘은 알고리즘 day

알고리즘

2021년 1월 6일

1009번: 분산처리

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int num = s.nextInt();
        int a, b;
        int[] answer = new int[num];

        for (int i = 0; i < answer.length; i++) {
            a = s.nextInt();
            b = s.nextInt();
            int result = 1;
            for(int j = 0; j < b; j++){
                result = result * a;
                if(result > 10) result = result % 10;
            }
            answer[i] = result;
            if (answer[i] == 0) answer[i] = 10;
        }
        for(int i = 0; i < answer.length; i++) {
            System.out.println(answer[i]);
        }
    }
}
  • 처음에 Math.pow() 메서드로 했는데 테스트 케이스 중 7의 100승과 9의 635가 long 타입의 범위도 넘는 바람에 어떻게 해야될지 막막

  • 구글링 해보니 for 문으로 입력받은 b만큼 곱해주는 방식으로 하고, 10이 넘으면 %연산자를 이용했다.

    • 사실 % 연산자로 연산한 결과에 또 a를 곱하면 그게 나머지 값이 아닌 거랑 연산하는거랑 왜 같은지 잘 이해가 안갔다.

    • 노트에 적어서 비교해보니 항상 1의 자리 수는 같다.

    • 예) 3의 6승
      - 3
      - 9
      - 27 → 7
      - 81 → 21 (1) 여기서 이전단계인 27에 3을 곱한 값이랑 %연산을 한 7에 3을 곱한 값이랑 일의 자리 값이 같다는 걸 알 수 있다.
      - 243 → 3
      - 729 → 9


      1076번: 저항

    • 색에 해당하는 값을 n 이라고 치면 곱은 10의 n 승임

      import java.util.Scanner;
      
      public class Main {
          public static void main(String[] args) {
              Scanner s = new Scanner(System.in);
              String[] color = new String[3];
      
              color[0] = s.next();
              s.nextLine();
              color[1] = s.next();
              s.nextLine();
              color[2] = s.next();
      
              int[] value = new int[3];
              for (int i = 0; i < value.length; i++) {
                  switch (color[i]) {
                      case "black":
                          value[i] = 0;
                          break;
                      case "brown":
                          value[i] = 1;
                          break;
                      case "red":
                          value[i] = 2;
                          break;
                      case "orange":
                          value[i] = 3;
                          break;
                      case "yellow":
                          value[i] = 4;
                          break;
                      case "green":
                          value[i] = 5;
                          break;
                      case "blue":
                          value[i] = 6;
                          break;
                      case "violet":
                          value[i] = 7;
                          break;
                      case "grey":
                          value[i] = 8;
                          break;
                      case "white":
                          value[i] = 9;
                          break;
                  }
              }
      
              String twoValue = String.valueOf(value[0]) + String.valueOf(value[1]);
              long answer = Integer.parseInt(twoValue) * (long) Math.pow(10, value[2]);
      
              System.out.println(answer);
              s.close();
          }
      }
    • 입력받는 부분부터 어떻게 해야하지 싶었다. 입력값을 한 행씩 받아오는데..

      • 중간에 s.nextLine() 을 넣어주면 엔터를 누르고 다음 행에서 입력을 받을 수 있다.
    • 입력값을 배열로 받아와서 for문으로 돌리면 편한데 처음에 무식하게 입력받은 값을 하나하나 switch 문 돌려서 코드에 저 긴 switch 문이 세번이나 들어갔다


      [기초-입출력] 실수 1개 입력받아 그대로 출력하기(설명)

      import java.util.Scanner;
      
      public class Main {
          public static void main(String[] args) {
              Scanner s = new Scanner(System.in);
              float a = s.nextFloat();
              System.out.print(String.format("%.6f",a));
          }
      }
    • a를 출력할때 String.format() 없이 출력했더니 통과하지 못했다.

    • String.format("%.6f" ,a)

      • 실수 a를 소수점 6째자리까지 나타내라는 의미

오늘 한 일

  • 백준 알고리즘 1009번과 1076번 풀었다.
  • 선택적으로 풀 문제는 문제 이해자체가 안가서 패쓰..
  • 알고리즘은 에너지 소모가 가장 많이 되는 것 같다.
  • 12월에 혼자 공부할때 알고리즘을 풀었어서 오늘 더 수월하게 푼 것 같다.
    • 꾸준히 조금씩 하는게 답인 것 같다.
  • 코드업 100제 중 1008번부터 1018번까지 풀었다.
    • 1008번은 인텔리제이에서도 잘 출력되고 구글링해서 다른 사람들이랑 코드도 같은데 왜 제출시에 출력만 이상하게 뜨는지

Reminder

  • 아침에 알고리즘 쉬운거 하나씩 풀어보자 (제발...!)
post-custom-banner

2개의 댓글

comment-user-thumbnail
2021년 1월 6일

안녕하세요, tech 기업에서 일하는/ 일하기를 희망하는 여성들을 모아서 모임을 만들고 있어요!
자세한 사항은 및 링크 참조바랍니다 :)
https://velog.io/@emilyscone/SheKorea-1%EA%B8%B0-%EB%A9%A4%EB%B2%84%EB%A5%BC-%EB%AA%A8%EC%A7%91%ED%95%A9%EB%8B%88%EB%8B%A4

1개의 답글