[JAVA] 백준 1110번 : 더하기 사이클

2020. 7. 18. 22:02·Computer Science/자료구조와 알고리즘

1. 문제

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 

N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.

 

2.

<코드 -1>

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n,num;
        int cnt=0;
        n=sc.nextInt();
        num=n;
        while(true){
            num=num%10*10+(num/10+num%10)%10;
            cnt++;
            if(n==num)    break;
        }
        System.out.println(cnt);
        sc.close();
    }
}

 

코드 1 풀이

문제에서처럼 n=26을 예로 들어 설명해 보자면

cnt=0 (cnt: 사이클의 길이)

n=26

num=26

<반복문>

2+6=8 ( 2는 num/10 , 6은 num%10 이고, 8은 둘의 합이므로 num/10+num%10)이다. 

num=68 (10의 자리수이므로 6에 10을 곱해준다. 따라서 num%10*10이고, 8의 경우는 위에서 구한 합의 일의자리이므로 (num/10+num%10)%10이다. )

cnt++ (cnt는 1)

num이 n과 같아질때까지 반복한다. 

 

 

<코드 -2>

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n,a,b,sum,num;
        int cnt=0;
        n=sc.nextInt();
        num=n;
        while(true){
            a=num/10; b=num%10;
            sum=a+b;
            cnt++;
            num=b*10+sum%10;
            if(n==num)    break;
        }
        System.out.println(cnt);
        sc.close();
    }
}

 

 

 

코드 2 풀이

코드 2는 코드1풀이에서 설명한 보라색 부분을 각각 변수에 넣었다. 즉, num의 십의 자리수를 a, num의 일의 자리수를 b, 그 둘의 합을 sum에 대입했다. 

 

3.

이 문제에 관해 표를 그리니 문제 이해도 빨라지고 코드를 어떻게 짜야하는 지 구성하기 편리했다. 

다음에도 숫자가 헷갈리거나 변수가 많아지는 문제가 나오면 표를 그려서 해결하도록 해야겠다. 

 

4. 링크

https://www.acmicpc.net/problem/1110

 

1110번: 더하기 사이클

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,

www.acmicpc.net

 

저작자표시 비영리 변경금지 (새창열림)

'Computer Science > 자료구조와 알고리즘' 카테고리의 다른 글

[JAVA] 백준 5543번 : 상근날드  (1) 2020.07.23
[JAVA] 백준 10039번 : 평균점수  (0) 2020.07.19
[JAVA] 10951번 : A+B -4  (0) 2020.07.18
[JAVA] 백준 10952번 : A+B -5  (0) 2020.07.18
[JAVA] 백준 10871번 : X보다 작은수  (0) 2020.07.17
'Computer Science/자료구조와 알고리즘' 카테고리의 다른 글
  • [JAVA] 백준 5543번 : 상근날드
  • [JAVA] 백준 10039번 : 평균점수
  • [JAVA] 10951번 : A+B -4
  • [JAVA] 백준 10952번 : A+B -5
BS Kwak
BS Kwak
  • BS Kwak
    Slow but steady wins the race
    BS Kwak
  • 전체
    오늘
    어제
    • 카테고리 (161)
      • Project (2)
      • Next.js (3)
      • HTML+CSS+JS (17)
      • Computer Science (139)
        • Programming Language (52)
        • 자료구조와 알고리즘 (75)
        • Digital circuit (3)
        • 기타 error (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    mysql error
    런타임 에러
    leetcode
    오블완
    c++error
    해시
    LNK2001
    cmd error
    티스토리챌린지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
BS Kwak
[JAVA] 백준 1110번 : 더하기 사이클
상단으로

티스토리툴바