1. 직사각형 별찍기
이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.
process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
//데이타를 분할해서 n값에 고정
const n = data.split(" ");
//첫번째([0])변수 n의 숫자 값을 a에 고정 및 두번째([1])변수 n의 숫자 값을 b에 고정
const a = Number(n[0]), b = Number(n[1]);
//*표를 상수a값 만큼반복해서 str값에 넣어준다
let str = "*".repeat(a);
//i 값은 1번째 부터 상수 b보다 작은 수번째 까지의 범위를 가지고 +1씩 하며 이를 상수a번만큼 반복해 찍은 *만큼 콘솔에 표기하는 것을 반복문(for)를 통해 콘솔에 반복해서 찍어준다
for(let i=0; i<b; i++) {
console.log(str);
}
});
2. 짝수와 홀수
정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.
function solution(num) {
//answer 값을 변수(var)로 지정
var answer = '';
//숫자를 2로 나누어 0이 남으면(=짝수) answer값을 even으로 한다
if (num % 2 == 0){
return answer ="Even";
//위의 if문이 아닐시(나누어서 1이남으면=홀수) answer값을 odd로 한다
}else{
return answer = "Odd";
}
//문제에서 숫자 0은 짝수로 한정 하였기에 0은 even으로 한다
if (num = '0'){
return answer = 'Even';
}
//var로 지정된 함수값answer에 위의 함수의 값을 호출함
return answer;
}
3. 가운데 글자 가져오기
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
function solution(s) {
//answer값을 공백으로 초기화
var answer =''
//단어의 길이가 2로 나누어 0이 남으면 짝수
if(s.length%2 == 0){
//단어의 길이/2-1번째 단어 + 단어의 길이/2번째 단어(단어의 첫번째는 0부터 센다)
answer = s[s.length/2-1] + s[s.length/2]
} else{
//홀수 단어의 길이를 /2 하면 소수점이 나오기 때문에 Math.floor(주어진 숫자와 같거나작은 정수중 가장 큰수로 반환)한단어를 선택한다
answer = s[Math.floor(s.length/2)]
}
return answer;
}
4. 두 정수 사이의 합
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
function solution(a, b) {
var answer = 0;
// a값이 b값보다 같거나 클 경우 if문 실행합니다.
if(a>=b){
// b값으로 i값을 초기화합니다. 그리고 만약에 a값이 5일 경우 5와 같거나 클때까지 b값부터 시작해서 i값을 증가시킵니다.
for(let i=b; i<=a; i++){
// b값인 i값을 answer값과 더합니다.
answer+=i;
}
}else{
// a<=b일 경우, a값으로 j값을 초기화합니다. 그리고 만약에 b값이 5일 경우 b값과 같거나 클 때까지 a값인 j를 증가 시킵니다.
for(let j=a; j<=b; j++){
// a값인 j값을 answer값과 더합니다.
answer+=j;
}
}
return answer;
5. 문자열을 정수로 바꾸기
문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.
function solution(s) {
//parseInt(i는대문자)로 문자로 오는 값(s)를 강제로 숫자(정수)로 변경하여 answer값에 입력
var answer = parseInt(s);
return answer;
}
6. 없는 숫자 더하기
0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
function solution(numbers) {
var answer = 0;
for(let i = 0; i<= 9; i++){
//numbers에 포함된 수를 확인(includes)한뒤 그것이 아닌숫자(!) 들을 answer값에 더한값을 answer값 으로 한다.
if(!numbers.includes(i)) answer += i;
}
return answer;
}
7. 음양 더하기
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
function solution(absolutes, signs) {
var answer = 0;
//absolutes의 길이가 1~1000까지므로 i값을 0부터 999까지(i<absolutes.length) 설정한뒤 그걸 하나씩 늘려가는 형식으로 하며
for(let i = 0; i < absolutes.length; i++) {
//sighs 값이 참일때는 absolutes 값을 더하고(?) 아닐때는(:) absolutes값을 answer값에서 뺀값을 answer값으로 한다
signs[i] ? answer+= absolutes[i] : answer-=absolutes[i];
}
return answer;
}
8. 평균 구하기
정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요.
function solution(arr) {
//arr값을 초기화함
let arr_plus = 0;
//i는 0부터 arr의 수보다 작고 arr_plus는 arr에 들어오는 수들의 합이된다
for(i=0; i<arr.length; i++ ){
arr_plus+=arr[i]
}
//최종적으로 arr_plus(arr값들의 총합)을 arr의 수로 나눈 값을 answer값으로 설정한다.
let answer = arr_plus/arr.length;
return answer;
}
9. 핸드폰 번호 가리기
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
function solution(phone_number) {
//answer값 초기화
var answer = '';
//*를 폰넘버의 길이에서 -4만큼의 길이만큼 반복해서 찍음 + 폰넘버 뒷자리 4개를 잘라 붙임
var answer = "*".repeat(phone_number.length - 4) + phone_number.slice(-4);
return answer;
}
10. 행렬의 덧셈
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
//i =행의 index값(ex. i=0 -> [ ](이거), [ ], [ ], [ ])
//j =i 행의 열의 index값(ex. j=0 -> [ 0(이거), X]
function solution(arr1, arr2) {
// answer값을 [ ]로 설정한다
var answer = [ ];
//외부의 반복문으로 answer값에 i의 index값 만큼의 [ ]를 push해준다
for(i=0; i<arr1.length; i++){
answer.push([]);
//내부의 반복문으로 answer[ ] 안에 arr1의 인덱스값 [0][0]값과 arr2의 인덱스값 [0][0]의 같은 인덱스 값끼리 더해서 push한다
//arr1[[1,2],[2,3]] arr2[[3,4],[5,6]]
//arr1[i의 0번째 index값([[ ], ])][j의 0번째 index값([1, ]) + arr2[i의 0번째 index값([ ])][j의 0번째 index([3, ])]를 더해서 answer의 0번째 index값 [[4, ], ]
//arr1[i의 0번째 index값([ ])][j의 1번째 index값([ ,2]) + arr2[i의 0번째 index값([ ])][j의 1번째 index([ ,4])]를 더해서 answer의 0번째 index값 [[ ,6], ]=> [[4,6], ]
//arr1[i의 1번째 index값([ ])][j의 0번째 index값([2, ]) + arr2[i의 1번째 index값([ ])][j의 0번째 index([5, ])]를 더해서 answer의 i=1 j=0 번째 index값 [ ,[7, ]]
//arr1[i의 1번째 index값([ ])][j의 1번째 index값([ ,3 ]) + arr2[i의 1번째 index값([ ])][j의 1번째 index([ ,6 ])]를 더해서 answer의 i=1 j=1 번째 index값 [ ,[ ,9 ]]=>[ ,[7,9]]
for(j=0; j<arr1[i].length; j++){
answer[i].push(arr1[i][j]+arr2[i][j]);
}
}
return answer;
}
11. x만큼 간격이 있는
함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.
function solution(x, n) {
var answer = [ ];
//x가 정수이므로 배열때 x*i가 0이 아닌 수부터 나와야 하기 때문에 i는 1부터 시작하여 늘어나는 반복문을 사용함
for (i=1; i<=n; i++){
//answer값의 뒤에 x*i 값의 나열을 n번째 까지 뒤로 붙임
answer.push(x*i)
}
12. 부족한 금액 계산기
새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
단, 금액이 부족하지 않으면 0을 return 하세요.
function solution(price, money, count) {
//가우스 공식을 이용해서 10번의 count가 있었다고 가정하였을시 1~10까지의 총합은 1+10 2+9 3+8등 11이 총 5번 곱한값인데 이를 n(n+1)/2로 나타낼수 있다
//거기에 price를 곱한뒤 그 값에서 현재 가진 money를 빼면 총 count만큼 탈때 드는 비용에서 내가 가진 금액을 뺀 나머지 값이 나온다
const tmp = price * count * (count + 1) / 2 - money;
//삼항연산자를 이용해서 위에 값이 0보다 크면 위에 값을 도출하면 되고 딱 맞아 떨어지면 0이 도출되게 하면 된다
return tmp > 0 ? tmp : 0;
}
return answer;
}
(다른 예시)
function solution(price, money, count) {
let answer = 0;
//i값을 총 탄 횟수(count)범위로 한정한뒤 반복문을 사용해서 count 만큼 탓을때
for (let i = 1; i <= count; i++) {
//그 값의 총합을 +=를 이용해 answer값에 축척 시킨다
answer += price * i;
}
//answer값(count만큼 탓을때 드는 비용의 총합)이 가진돈 (money)보다 크면 answer값에서 money를 뺀값을, 아니면 0을 도출한다
return answer > money ? answer - money : 0;
}
13. 2016년
2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT
입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요.
function solution(a, b) {
// 1월 부터 12월까지의 달별 일수
const monthDay = [31,29,31,30,31,30,31,31,30,31,30,31]
//1월 1일이 금요일이니 목요일 부터 값이 시작
const weekDay = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"]
let days = b
//a달 까지의 총 일수 합
for(let i=0 ; i<a-1 ; i++)
days += monthDay[i];
//총 일수를 7로 나눠서 남은 나머지 값의 weekDay 데이터값
return weekDay[days%7];
}
14. 나누어 떨어지는 숫자 배열
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
function solution(arr, divisor) {
// =>를 사용해서 v가(arr값) divisor로 나누었을때 0이 남으면 arr값을 answer값에 리턴한다.
var answer = arr.filter(v => v%divisor == 0);
// answer의 길이가 0(arr을 divisor로 나누어 나머지가 0이 나오는 인자가 없을경우) true값이 나오면 -1을 표기, false값일때는 .sort((a, b) => a - b);를 이용해 오름차순 정렬을 해서 리턴함
return answer.length == 0 ? [-1] : answer.sort((a,b) => a-b);
}
15. 내적
길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.
이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)
function solution(a, b) {
var answer = 0;
for(i=0; i<a.length; i++) {
answer += a[i]*b[i];
}
return answer;
}
16. 문자열 내 p와 y의 개수
대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.
function solution(s){
//s를 다 소문자로 str에 배열
let str = s.toLowerCase():
let count = 0
for(i=0; i<s.length; i++){
//소문자로 변환한 s값에 p가 있으면 카운트에 +1씩 늘림
if(str[i]==="p")count++;
//소문자로 변환한 s값에 s가 있으면 카운트에 -1씩 줄임
else if(str[i]==="y")count--;
}
//두개가 같아서 +- 값이 0면 true 아니면 false
return count === 0 ? true : false
}
-다른방식-
function numPY(s){
var result = true;
var pCount = 0;
var yCount = 0;
s = s.toLowerCase();
for(var i = 0; i < s.length ; i++) {
if (s[i] === 'p') {
pCount++;
} else if (s[i] === 'y') {
yCount++;
}
}
return (pCount === yCount) ? true : false;
}
17. 문자열 다루기
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
function solution(s) {
//s의 길이가 4 혹은 6일때는 삼항연산을 이용해 true일때 (s == parseInt(s,10) ? true : false)값을, false일때는 false를 도출
//s를 10진법의 수로 변환(글자를 숫자로 변환-parseInt) 할 경우 삼항연산을 통해 이 값이 s 값과 같으면 true, 틀리면 false를 도출
return s.length == 4 || s.length == 6 ? (s == parseInt(s,10) ? true : false ) : false ;
}
18. 서울에서 김서방 찾기
String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.
function solution(seoul) {
var answer = '';
//index 값에 seoul에서 Kim 값을 찾아 일치하는 첫번째 인덱스 값을 넣어준다
let index = seoul.indexOf('Kim')
answer = "김서방은 " + index +"에 있다"
return answer;
}
19. 수박수박수박수박수박수
길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.
function solution(n) {
var answer = '';
for (let i = 0; i< n; i++){
if(i%2 === 0){
answer +="수";
}else{
answer +="박";
}
}
return answer;
}
20. 완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
function solution(participant, completion) {
//참가자와 완주자 배열을 정렬해준다
participant.sort();
completion.sort();
for(var i=0; i<participant.length; i++){
//같은 인덱스 값의 참가자와 완주자가 다를때 한명이 빼고 모든 선수가 완주를 했기 때문에 이때의 참가자 이름을 반환하면 된다
if(participant[i] !== completion[i]){
return participant[i];
}
}
}
21. 이상한 문자 만들기
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
-제한 사항
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
function solution(s) {
let answer = '';
let str = s.split(' ');
for (let i = 0; i<str.length; i++){
for(let j = 0; j<str[i].length; j++){
if(j % 2 === 0){
answer += str[i][j].toUpperCase();
} else {
answer += str[i][j].toLowerCase();
}
}
if (i < str.length-1){
answer += ' ';
}
}
return answer;
}
22. 자릿수 더하기
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
function solution(n){
var answer = 0;
//자연수 n을 문자열로 변환하여 m에 상수값으로 저장함
var m=String(n);
//단어가 된 숫자(m)의 길이를 i의 범위로 만든다음 그 인덱스 값에 따른 문자(실제론숫자)를 answer에 다시 숫자로 변환하여 누적하여 더한다.
for(var i=0; i<m.length; i++){
answer+=parseInt(m[i]);
}
return answer;
}
23. 자연수 뒤집어 배열로 만들기
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
function solution(n) {
//자연수 n을 문자로 전환해서 arr 값에 배열한다
let arr = n.toString();
let answer = [];
//i의 범위를 arr의 끝에서 부터 하나씩 index값을 줄여가면서 answer값에 숫자로 변환하여(Number) push해준다.
for(let i = arr.length-1; i>=0; i--){
answer.push(Number(arr[i]));
}
return answer;
}
24. 정수 내림차순으로 배치하기
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
-제한 조건
n은 1이상 8000000000 이하인 자연수입니다.
function solution(n) {
//n을 문자로 바꿔서 각자리수를 배열로 나눈뒤 내림차순으로 정렬(sort((a,b) => b-a)한것을 문자열 형태로 합쳐서 배열을 없앤 다음 통째로 숫자로 바꿔준다
return Number(n.toString().split("").sort((a,b) => b-a).join(""));
}
25. 정수 제곱근 판별
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
-제한 사항
n은 1이상, 50000000000000 이하인 양의 정수입니다.
function solution(n) {
var answer = 0;
for(let i=0, a=0; i<=n; i++){
//정수 n을 i로 나누었을때 i가 나오면 i는 양의 정수이므로 i+1을 a값에 넣어 이수를 제곱함
if(n/i===i){
a = i + 1
return a*a
} else {
answer = -1
}
}
return answer;
}
다른 방법
function solution(n) {
// n의 제곱근을 sqrt값에 반환한다. 144 -> 11
const sqrt = Math.sqrt(n);
// 제곱근이 정수가 맞는지 판단한다.
if (Number.isInteger(sqrt)) {
// 제곱근이 정수가 맞다면 1을 더한 후 그에 대한 제곱을 리턴한다. // 11 -> 12 -> 144
return (sqrt + 1) ** 2; }
// 정수가 아니라면 -1을 반환한다.
return -1;
}
26. 제일 작은 수 제거하기
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
-제한 조건
arr은 길이 1 이상인 배열입니다.
인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
function solution(arr) {
var answer = [];
//arr의 값이 [10] 같은 경우 배열이 1나이고 이는 배열의 길이가 1이란 소리다
if(arr.length == 1){
//제일 작은 배열 하나를 빼면 배열이 없어지는 빈 배열이기 때문에 엔서 값에 -1을 넣은후 주어진 값을 반환한다
answer.push(-1);
return answer
} else {
//배열 길이가 1보다 클 경우 배열이 최소 2개 이상이기 때문에 여기서 하나를 제거(splice( , 1))해주는데 이때 제거하는 숫자는
//arr의 배열(...arr)에서 첫번째(indexOf) 최소값(Math.min)이다
arr.splice(arr.indexOf(Math.min(...arr)),1)
}
//그 arr값을 answer에 넣은후
answer = arr;
//answer를 반환한다
return answer;
}
27. 콜라츠 추측
1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.
1-1. 입력된 수가 짝수라면 2로 나눕니다.
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.
예를 들어, 입력된 수가 6이라면 6→3→10→5→16→8→4→2→1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야하는지 반환하는 함수, solution을 완성해 주세요. 단, 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요.
-제한 사항
입력된 수, num은 1 이상 8000000 미만인 정수입니다.
function solution(num) {
let answer = 0;
//500번 까지 반복문을 돌린다
for (let i = 0; i < 500; i++){
//입력된 수가 아직 1이 아닌 다른 수가 왔을때
if (num != 1){
//num 값이 짝수 (num%2 = 0 일때는 num /2 아니면 num*3+1을 해서 넘값에 넣어 1이 될때까지 반복문이 돌아간다
num = num % 2 === 0 ? num / 2 : num * 3 + 1;
} else {
//num 값이 1이 되는 순간의 반복문이 돌아간 횟수를 answer값으로 반환한다.
return answer = i;
}
}
//반복문 500번이 끝난 시점에 1이 아직도 안나오면 -1을 answer값에 반환한다.
return answer = -1;
}
28. 하샤드 수
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
-제한 조건
x는 1 이상, 10000 이하인 정수입니다.
function solution(x) {
var sum = 0;
//x를 문자열로 나누어서 숫자의 자릿수에 다 인덱스 값을 주고 각자 나누어 배열한다
var arr = String(x).split("");
//arr값을 반복문을 통해 각자리수를 다 숫자로 치환 하여 sum값에 더해서 축적한다
for(let i=0; i<arr.length; i++){
sum += Number(arr[i])
}
//자연수 x를 sum값(각자리수의 합)으로 나누어 나머지가 없으면 하샤드 수이므로 true 나머지가 나오면 false
return (x % sum == 0) ? true:false;
}
'잡동사니' 카테고리의 다른 글
forEach와 map (0) | 2022.05.21 |
---|