딱히 방법이 떠오르진 않을땐 처음부터 전부 다 해봐!!
진짜 정답을 확실하게 맞출순 있어
무작정 문제 풀어보면서 생각해보자
N개의 자연수가 입력되면 각 자연수의 자릿수의 합을 구하고, 그 합이 최대인 자연수를 출력 하는 프로그램을 작성하세요. 자릿수의 합이 같은 경우 원래 숫자가 큰 숫자를 답으로 합니다. 만약 235 와 1234가 동시에 답이 될 수 있다면 1234를 답으로 출력해야 합니다.
▣ 입력설명
첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다. 각 자연수의 크기는 10,000,000를 넘지 않는다.
▣ 출력설명
자릿수의 합이 최대인 자연수를 출력한다.
▣ 입력예제
[128, 460, 603, 40, 521, 137, 123]
▣ 출력예제
137
위 문제는 딱히 이진트리나 그런 방법이 안통한다.
완전탐색을 통해서 답을 확실히 찾아야 함
각자리수 더하는 방법은 10으로 나눈 나머지를 계속 더해주면 된다.
혹은
내장함수를 이용해서 배열의 요소를 배열로 바꾸고 또 리듀서를 한다.!!
function solution(arr){
let answer
// 최대값을 비교 하기 위해 자바스크립트에서 가장 작은수를 지정한다.
let max=Number.MIN_SAFE_INTEGER;
for (let el of arr){
let sum = 0
let tmp = el;
// 각자리수 더하는 방법
// 나머지가 0이 되면 멈춘다.
while(tmp){
sum += (tmp % 10);
tmp = parseInt(tmp / 10);
}
// 더한 숫자를 비교하는 방법
if(sum > max){
max = sum;
// 진짜 원하는건 배열의 요소
answer = el;
// 값이 더한 값이 같을때는 요소의 숫자가 큰걸 리턴해라
} else if (sum === max){
if(el > answer) {
answer = el;
}
}
}
return answer;
}
내장함수를 이용하기
function solution(arr){
let answer
// 최대값을 비교 하기 위해 자바스크립트에서 가장 작은수를 지정한다.
let max=Number.MIN_SAFE_INTEGER;
for (let el of arr){
let sum = el.toString().split('').reduce((acc,cur) => acc + Number(cur),0);
// 더한 숫자를 비교하는 방법
if(sum > max){
max = sum;
// 진짜 원하는건 배열의 요소
answer = el;
// 값이 더한 값이 같을때는 요소의 숫자가 큰걸 리턴해라
} else if (sum === max){
if(el > answer) {
answer = el;
}
}
}
return answer;
}
N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 소수를 출력하는 프로그램을 작성하세요. 예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출력한다. 단 910를 뒤집으면 19로 숫자화 해야 한다. 첫 자리부터의 연속된 0은 무시한다.
▣입력설명첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다.각 자연수의 크기는 100,000를 넘지 않는다.
▣출력설명첫 줄에 뒤집은 소수를 출력합니다. 출력순서는 입력된 순서대로 출력합니다.
▣입력예제
932 55 62 20 250 370 200 30 100
▣출력예제
123 2 73 2 3
숫자를 뒤집는 방법을 생각해보자
십진수인 수는 10으로 나누면 일의자리는 항상 나머지가 된다.
그렇다면 계속 반복시키고 앞으로 보내면 될듯
(혹은) 내장함수를 이용해서 배열을 이용해서 뒤집어 보자
뒤집어진 수들은 소수인지 판정해서 그 수를 결과배열에 넣어준다.
소수인지 판정하는 방법은 자기 자신외 나눠 떨어지면 소수 이다.
-> 판정 방법은 함수를 만들어서 해보자
function isPrime(num){
if(num === 1) return false;
for(let i = 2; i <= parseInt(Math.sqrt(num)) ; i++) {
if(num % i === 0) return false;
}
return true;
}
function solution(arr){
let answer = [];
for(let el of arr){
let result = 0;
while(el){
let t = el % 10;
result = result * 10 + t
el = parseInt(el / 10)
}
if(isPrime(result)) answer.push(result);
}
return answer;
}
내장함수를 이용하는 방법
function isPrime(num){
if(num === 1) return false;
for(let i = 2; i <= parseInt(Math.sqrt(num)) ; i++) {
if(num % i === 0) return false;
}
return true;
}
function solution(arr){
let answer = [];
for(let el of arr){
let result = Number(el.toString().split('').reverse().join(''));
if(isPrime(result)) answer.push(result);
}
return answer;
}
멘토링