TIL 230410_이상한 문자 만들기, 자릿수 더하기, 자연수 뒤집어 배열로 만들기, 정수 내림차순으로 배치하기
✅문제
-이상한 문자 만들기
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
✍문제풀이
1. 나의 접근방식 및 실패한 코드
var s = "try hello world"; //단어 기준으로 index 홀짝을 판별
답은 'TrY HeLlO WoRlD' //try의 홀수번째, hello의 홀수번째etc
인덱스 별로 홀짝을 지정해줘야하니 try hello world를 배열화 시켜야하나?
'try','hello','world' 가 나왔으면 이제 각각의 요소를 또 요소로 나눠주어야함, 그 작업은?
let sToArry=s.split("")쳤는데 h,e,l,l,o 이렇게 나옴..그 이유는 " "<사이에 공백을 안줬기때문!!! ""안의 문자를 기준으로 나누는 것이기에 필수로 쳤어야하거늘 ..
2. 문제파악 및 해결한 코드
막힌 부분: 각각의 요소를 다시 나누는 작업, 즉 [i]의 [j]를 구해야하고,
그 [j]의 요소번째!!를 나눠야함.
나는 [j]번째 즉 요소 그 자체의 자리를 나눌 생각을 안하고 단어의 length를 나누려했다.
각각의 요소를 j를 이용해서 풀어야 된다는 것, 배열의 수를 %2해서 값을 구해야한다는 개념까지 접근했다!!
배열안의 요소의 요소를 돌아야하니 for문안에서 for문을 돌려 각 단어의 위치를 %2 하여 남는 값으로 대문자화, 소문자화를 결정함.
var s = "try hello world";
function solution(s) {
let sToArry = s.split(" ");
let result = [];
for (let i = 0; i < sToArry.length; i++) {
let word = sToArry[i]; //각 요소 'try','hello','world'
let newWord = ""; //홀수 번째 문자를 대문자화 시킬 단어
for (let j = 0; j < word.length; j++) {
if (j % 2 === 0) {
newWord += word[j].toUpperCase();
} else {
newWord += word[j];
}
} //여기까지가 for문 조건 끝, 즉 대문자화 끝. 대문자로 만든 문자를 새로운 배열로 만들어야함.
result.push(newWord);
}
return result.join(" ");
}
console.log(solution(s));
완성!
✅문제
-자릿수 더하기
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
✍문제풀이
1. 나의 접근방식 및 실패이유
//우선 각 자릿수를 배열화 시키고, 배열화 시킨 것을 더하면 될듯? 접근 OK
//주어진 숫자를 자리별로 배열화 하는 단계
//1. 숫자->문자화, 123->'123'
//2. 문자화된 '123'을 []화 시켜야함. 새로운 []변수를 지정해준다.
//3. []안의 '123'을 스플릿 시켜줘야함.
//4. []안의 '123'이 스플릿 되어 배열에 들어가면 ['1','2','3']이 됌. 문자열끼린 더할 수 없으므로 다시 숫자화 시킨다. (결과 값에 Number만 달아주면 끝)
//5. 배열안의 요소가 숫자화 되면 [1,2,3]라는 배열이 탄생하고 이것을 다시 for문으로 돌려서 더한다!!
2. 문제파악 및 해결한 코드
접근이 맞았고 실패한 코드는 없었으나, toString과 split을 합쳐서 한번에 구현하도록 노력해야겠다.
또한 split 함수는 그 자체로 "배열"을 만든다는 점을 알았다.
function solution(n) {
var arr = n.toString().split("");
let answer = 0;
const numString = n.toString(); //'123'
const eachNum = numString.split(""); //['1','2','3']
for (let i = 0; i < eachNum.length; i++) {
eachNum[i] = Number(eachNum[i]);
//['1','2','3']을 Number화 시켜서 [1,2,3]
}
for (let j = 0; j < eachNum.length; j++) {
answer += eachNum[j];
}
return answer;
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
}
console.log(solution(n));
✅문제
-자연수 뒤집어 배열로 만들기
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
✍문제풀이
1. 나의 접근방식 및 실패이유
var n = 123; // answer = [3,2,1]
//나의 접근 : n을 문자화 시켜서 배열에 넣은 후 내림차순으로 정렬!
//오류 : n을 문자화 시켜 배열에 넣기 까지는 맞았으나 내림차순에서 틀렸다.
function solution(n) {
var answer = [];
const numString = n.toString(); //'123'
const eachNum = numString.split(""); //['1','2','3']
for (i = 0; i < eachNum.length; i++) {
eachNum[i] = Number(eachNum[i]); //[1,2,3]
}
for (i = 0; )
return answer;
}
console.log(solution(n));
2. 문제파악 및 해결한 코드
n은 12345가 될수도있고 43251도 될 수 있기 때문에..
즉 n = 43251일때 우리가 원하는 결과 값은 54321이 아닌 [1,5,2,3,4] 라는 뜻.
접근을 각 요소의 위치로 해야겠다.
function solution(n) {
var arr = n.toString().split(""); //split의 결과는 배열이다!!
// 123을 '123'시키고 ['1','2','3']으로 나눔. 함수 간소화
var answer = [];
// 이제 ['1','2','3']을 [1,2,3]으로 만들고 [3,2,1]로 만들어야함.
for (let i = arr.length - 1; i >= 0; i--) {
//i = 2, i가 0보다 크거나 같아질때까지만, 즉 2->0으로 작아진다, 조건에 충족하면 i는 1씩 작아진다.
//for 문의 let i= 는 처음 한번만 실행되는것임을 꼭 인지할 것 .
answer.push(Number(arr[i]));
}
return answer;
}
console.log(solution(n));
✅문제
-정수 내림차순으로 배치하기
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다..
✍문제풀이
1. 나의 접근방식 및 실패 이유
873211을 배열로 만들기 string, split 그 후 오름차순 정렬한 후에 숫자화시키자!
오름차순 정렬에서 막힘, 오름차순 정렬 후 배열을 어떻게 꺼내올지 막힘
2. 문제파악 및 해결한 코드
배열의 문자열도 오름차수로 정렬할 수 있다는 점을 몰랐음. arr.sort(종류)로 해결, arr.join("")은 배열의 모든 요소를 하나의 문자열로 합침, parselnt 는 문자열을 정수로 변환하여 반환해줌. ---> 이 부분은 다른 식으로도 해석 가능 할듯?
function solution(n) {
var arr = n.toString().split(""); //['1','2','3']
var neWarr = arr.sort((a, b) => b - a); //['3','2','1']
var answer = "";
// for (let i = 0; i < arr.length; i++) {
// answer += arr[i];
// }
answer = parseInt(neWarr.join(""));
return answer;
}
console.log(solution(n));
//나만의 코드 완성!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!