본문 바로가기
개발/알고리즘 풀기

TIL 230410_이상한 문자 만들기, 자릿수 더하기, 자연수 뒤집어 배열로 만들기, 정수 내림차순으로 배치하기

by 코딩하는짱구 2023. 4. 10.
반응형

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));

//나만의 코드 완성!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

 

반응형