정현수
현수 세상
정현수
전체 방문자
오늘
어제
반응형
  • 분류 전체보기 (267)
    • NEXTSTEP 자바스크립트 클린코드 2기 (1)
    • 우테코 4기 (6)
    • 회고록 (5)
    • 개발지식 (6)
    • React (3)
      • React Clone Coding (3)
    • React Native (2)
    • Kubernetes & Docker (36)
      • 궁금한 것 (13)
    • Flutter (2)
    • 알고리즘 (168)
      • 프로그래머스 1단계 (27)
      • 프로그래머스 2단계 (37)
      • 백준 (98)
      • 이론 (6)
    • 자료구조 (3)
    • 유튜브 (1)
    • 책 읽자 (1)
    • 취업준비 (1)
    • 대내 활동 (31)
      • 2022년 겨울방학 알고리즘 특강 (0)
      • 2020년 여름방학 모각코 (13)
      • 2020년 겨울방학 모각코 (13)
      • 웹프로그래밍 상상튜터링 (5)

인기 글

최근 글

공지사항

  • 블로그 이동

태그

  • 레플리카셋
  • 백준
  • image run
  • NodePort
  • 이코테
  • image pull
  • 프로그래머스
  • flutter
  • 노드
  • Kubernetes
  • 그리디
  • 모각코
  • Jenkins
  • React
  • kubelet
  • 알고리즘
  • 자바스크립트
  • replicaset
  • programmers
  • 디플로이먼트
  • 쿠버네티스
  • 리액트
  • 파이썬
  • Deployment
  • javascript
  • mysql
  • 우테코
  • 개발지식
  • docker
  • 공식문서

최근 댓글

블로그 메뉴

  • 홈

티스토리

hELLO · Designed By 정상우.
정현수

현수 세상

[백준] 10610번: 30 (JavaScript, NodeJS)
알고리즘/백준

[백준] 10610번: 30 (JavaScript, NodeJS)

2022. 1. 6. 15:30
반응형

문제

어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다.

미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라.

입력

N을 입력받는다. N는 최대 105개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다.

출력

미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라.

예제 입력 1 복사

30

예제 출력 1 복사

30

예제 입력 2 복사

102

예제 출력 2 복사

210

예제 입력 3 복사

2931

예제 출력 3 복사

-1

예제 입력 4 복사

80875542

예제 출력 4 복사

88755420

정답 풀이

const fs = require("fs");

// 백준 제출 할 때 주석 제거
// const readFileSyncAddress = '/dev/stdin';

// VSC 테스트 할 때 주석 제거
const readFileSyncAddress = "input.txt";

const input = fs.readFileSync(readFileSyncAddress).toString().trim().split("\n");

const n = input[0];

// 문제 풀이
function solution(n) {
	// 우선 0이 포함되어 있지 않으면 30의 배수가 아니다.
	if (!n.split('').includes('0')) {
		console.log('-1');
		return;
	}

	// 모든 자리의 수를 합하고, 그게 3으로 나누어지면 3의 배수이다.
	const numberSplitArray = n.split('').map(i => Number(i));
	const sumOfEachPosition = numberSplitArray.reduce((acc, cur) => acc + cur);
	
	if (sumOfEachPosition % 3 !== 0) console.log('-1');
	else console.log(numberSplitArray.sort((a, b) => b - a).join(''));
}

// 제출
solution(n);

 

핵심 아이디어는 각 자리의 수를 합해서 3으로 나누어지면 그 수는 3의 배수라는 것이다.

 

102 숫자가 있으면 102의 각 자리를 더한 값

1 + 0 + 2 = 3이다.

 

3은 3으로 나누어 떨어지기 때문에 102는 3의 배수이다.

그 중에 제일 큰 값을 뽑으려면 102를 split으로 나눠 배열로 만든 다음

sort로 내림차순 정렬을 하면 된다.

 

반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 1715번: 카드 정렬하기 (JavaScript, NodeJS)  (0) 2022.01.08
[백준] 1339번: 단어 수학 (JavaScript, NodeJS)  (0) 2022.01.07
[백준] 2217번: 로프 (JavaScript, NodeJS)  (0) 2022.01.05
[백준] 1026번: 보물 (JavaScript, NodeJS)  (0) 2022.01.05
[백준] 2630번: 색종이 만들기 (JavaScript, NodeJS)  (0) 2021.08.31
    정현수
    정현수
    깃허브 : https://github.com/junghyeonsu 개인 블로그 : https://junghyeonsu.com/ (양질의 글을 올리려고 항상 노력합니다.)

    티스토리툴바