티스토리 뷰
문제
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.
26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.
위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.
N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.
출력
첫째 줄에 N의 사이클 길이를 출력한다.
예제입력
26
예제 출력
4
문제풀이
//입력값 받기, 같은 폴더내에 input.txt 생성
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().split('\n');
solution(input);
function solution(input) {
let preNum;
let postNum;
let num = input < 10 ? '0'+input : input+'';
let result = num;
let count =1;
let check = true;
while(check){
preNum = num[1];
postNum = (+num[0])+(+num[1]);
postNum = postNum>=10 ? (postNum+'')[1] : postNum;
num = preNum+postNum;
check = result===num ? false : count ++;
}
console.log(count);
}
설명
단계별 풀이에따라 while문을 사용하여 해결하였다.
1. 입력으로 넘어온 값이 10 이하일시, 앞에 0을 추가한다. ex) 6이 입력되면 06으로 바꿔주기
삼항 연산자를 사용하여 if문을 사용하지 않고 진행하였다. 10이하일시 '0'+input 값을 주어 String으로 변환과 앞에 0을 붙여줌
* +연산자는 좌항 및 우항에 String 값이 있으면 자동으로 String값으로 변환시켜줌
2. 문자열 num을 만들어서 num[0]과 num[1]을 분리
num[1]의 값은 다음 숫자에서 num[0]이 되어야하고 다음숫자에서 num[1]은 num[0]+num[1]이 되어야함.
preNum + postNum으로 생각하고 진행
단, postNum이 10이 넘을경우, 문제가 되는데 10이 넘을경우 일의자리에 위치한 숫자만가져와야 함으로 삼항연산자를 사용.
10이 넘을경우 2번째칸에 해당하는 값만 가져와서 postNum에 저장
맨 처음 입력된 값과 같아질 경우 while문 종료.
출처
https://www.acmicpc.net/problem/1110
'Algorithm' 카테고리의 다른 글
[JavaScript ] BeakJoon 3052 나머지 (0) | 2021.08.15 |
---|---|
[JavaScript ] BeakJoon 2577 숫자의 개수 (0) | 2021.08.14 |
[JavaScript ] BeakJoon 15552 빠른 A+B (0) | 2021.08.06 |
[JavaScript ] BeakJoon 2884 알람시계 (0) | 2021.08.04 |
[JavaScript ] BeakJoon 2753 윤년 (0) | 2021.08.04 |
- Total
- Today
- Yesterday
- reack-cookies #아이디 저장하기 #react 아이디 저장 #react cookie #리엑트 아이디 저장하기
- AWS #인바운드 #SSH #인스턴스 연결
- linux/amd64/v2
- JavaScript #Programmers #lvl2 #프로그래머스 오픈채팅방 # 오픈채팅방 문제
- supported: linux/amd64
- PDF #pdfkit
- node.js 파일 저장
- mysql date between # mysql date between 대소 비교 연산자
- Mac docker.for.mac.host.internal
- BOJ #JS
- PoolCluster : Error: connect ECONNREFUSED 127.0.0.1:3306)
- docker # docker build # m1 docker build
- excel 파일 만들기 #node.js #express excel 파일 만들기 #데이터 입력해서 excel 파일 만들기
- mysql date between performance
- react #img 전송
- mysql date type
- Swal #sweetalert2 #alert #알림창 띄우기 #react swal
- react #react-spinners #modal loading #overlay #로딩창 #react 로딩창 만들기
- docker mysql
- mysql date
- ERROR: failed to solve: no support for running processes with linux/amd64/v3 platform
- Express multer #Express File 저장 #node.js
- node.js #node.js pdf만들기 #node.js pdfkit
- see ec2 instance connect prerequisites at https://docs.aws.amazon.com/awsec2/latest/userguide #인스턴스 연결 안됨
- ec2 instance connect is unable to connect to your instance. ensure your instance network settings are configured correctly for ec2 instance connect. for more information
- FormData #FormData 파일전송 #FormData append json # React FormData File #React FormData append Json
- Procedure #mysql #mysql Procedure #mysql 반복문 #Procedure 반복문 #mysql insert 반복문
- Pytorch #Yolov5 #Segementation
- 이미지 전송 # 이미지 업로드 #이미지 여러장 #이미지 여러장 업로드 #react 이미지 업로드 #react 이미지 여러장 업로드
- React filter #js Includes #React Filter includes
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |