[문제설명]
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
[제한사항]
N의 범위 : 100,000,000 이하의 자연수
function solution(n)
{
let str=n.toString().split('') //n을 배열로 만듦
var newArr = str.map(Number); //배열로 만든 후 요소를 숫자로 변환
// console.log(typeof(str[0]))
let sum=''
sum = newArr.reduce(function (accumulator, currentValue) {
return accumulator + currentValue;
}, 0);
// console.log(sum)
return sum
}
reduce()함수를 쓰는 것까진 수월하게 됐는데 숫자의 합이 6이 아니라 123으로 떠서 왜 그런지 살펴봤다. 알고 보니 요소가 문자타입이라 그런 것을 알게 됐음! 그래서 map으로 숫자로 변경 후 작동시켜보니 잘 돌아갔다.
[문제설명]
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
[제한 조건]
n은 10,000,000,000이하인 자연수입니다.
이 문제는 쉽게 풀림.
function solution(n) {
//reverse함수 존재는 알고 있었는데 없이 풀어보고 싶었음
const a=n.toString().split('') //n을 배열로 만들어주고
let result='';
const sum=[];
// console.log(a)
for(i=0;i<a.length;i++){
result=a[a.length-(i+1)] //반대로 들어가는데 0번째는 length-1은 null값이 되어버리므로 i+1을 빼줌.
sum.push(result)
}
var newArr = sum.map(Number); //sum 안 값이 문자라 숫자로 바꿔줌
return newArr
}
return n.toString().split('').reverse().map(o => o = parseInt(o));
나
var arr = [];
do {
arr.push(n%10);
n = Math.floor(n/10);
} while (n>0);
return arr;
로도 풀 수 있음.
[문제설명]
첫째 줄에 정수 n이 주어진다. (0≤n≤100)
다음 예제와 같이 삼각형 모양으로 ‘*’을 출력하세요.
(공백의 개수와 별의 개수를 정확하게 확인해주시길 바랍니다.)
[예시] |
---|
어렵긴 어려웠지만 용케 풀어냈다. 내 식은 이렇다.
let star= 9; //확인용 예시코드
function solution(star){
let arr=[]; //세로줄 지정(9개의 줄로 삼각형 만들어야함)
let answer=[]; //"*"의 개수
arr.length=star;
let x=star-1;
for(i=0;i<star;i++){
answer.push((i*2)+1) //별 개수가 1,3,5,7이런 식으로 늘어나서 i*2+1로 지정함
}
for(i=0;i<answer.length;i++){ //여백을 넣기 위한 for문
let x=star-1
x-=i
console.log(" ".repeat(x)+"*".repeat(answer[i]+" ".repeat(x)))
} //star-1값은 여백을 반으로 나눈 값이라서 여백+"*"+여백이 되도록 했다.
}
solution(star);
여백을 더해 가운데로 솟아오른 삼각형을 만드는게 제일 어려웠다. 직각 삼각형으로 *을 찍는 건 정말 금방이었는데... 그래서 어떻게 저런 삼각형이 나왔을까 생각하다 보니 배열의 인덱스 개수는 제일 마지막 줄, 17개로 고정한 채로 가운데에 별을 두고 여백을 넣도록 했다. 그래서 이리저리 콘솔을 돌려 let x=star-1
값으로 한쪽 여백을 설정해서 양쪽에 여백을 붙여 만들었다. 솔직히 첨엔 이렇게 만들 생각 못 했는데 노트에 별과 인덱스값을 쓰며 규칙성을 찾다보니 찾아낼 수 있었다.
function solution(star){
// 코드 작성
let temp = ''; // 트리를 담아줄 변수 생성
for(let i = 0; i < star; i++) {
temp += '\n'; // 줄 바꿈
for(let j = 0; j < star - i; j++) {
temp += ' '; // 공백 생성
}
for(let k = 0; k < 2 * i + 1; k++) {
temp += '*'; // 별 찍기
}
}
console.log(temp);
}
let star= 9;
solution(star)
// 별의 개수가 2개씩 늘어나기 때문에, 2의 배수가 필요한 것으로 보임
// 별의 개수가 1개부터 시작해야 하기 때문에, +1을 대입
function solution20 (n){
let str = "";
for(let i = 0; i < n; i++)
str += " ".repeat(n - (1 + i)) + "*".repeat(1 + (i * 2)) + "\n";
return str;
}
내일 알고리즘 테스트라 어려운 문제를 여럿 도전해봤는데 진짜 엄청 빡셌다. 이 값이 어떻게 나왔는지 고민하는 과정에서 엄청 삽질을 많이 한 듯... 끝으로 내가 만들었던 여러 삼각형을 남기면서 글을 마치겠다.
산타모자🎅 | 보고가세요✨ |
---|---|
어제 보여주신 별찍기군요!
산타모자 잘 찍으셨네요! ㅋㅋ 이번주 너무 고생하셨고 다음주도 화이팅입니다!