프로그래머스)이상한문자만들기

minji jeon·2022년 7월 18일
0

알고리즘

목록 보기
17/29
post-thumbnail

1. 문제

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

2. 접근

우선 하나하나 바꿔야 된다고 생각하여
string으로 바꿔준뒤 조건을 만족시켜주기위해 " "을 기준으로 또 쪼개줘야 할것이다.
그리고 배열값 하나하나를 꺼내 대문자와 소문자로 바꿔줘야한다고 생각했다.
이때 조건문을 사용하여 짝수번째와 홀수번째를 구분해준다.

3. 내답

사람이란 계속 익숙한 방법만 사용하게 된다.....

function solution(s) {
  let result = "";    
  var a = s.split(" ");   //[ 'try', 'hello', 'world' ]

  for(let j = 0 ; j< a.length ; j++){
    for (let i = 0 ; i< a[j].length ; i++){
  (i % 2 === 0 ? result += a[j][i].toUpperCase() : result += a[j][i].toLowerCase())
}
result += " "
  }
return result.substring(0,result.length-1)
}
solution("try hello world");

배열로 변환된 문자는 반복문을 돌게되며, 문자를 계속 더해주도록 하였다.
반복문을 모두 돌고 나올때마다 누적된 문자열에 " " 공백을 추가하여 띄어쓰기를 해주었다.
그리고 마지막 줄에 공백이 포함되어서 나오므로 substring으로 마지막 문자열을 잘라주었다.

그렇다면 더이상 for반복문을 안돌릴수 있는 방법은 없을까..

4. 남의답

for in (.ver)

function toWeirdCase(s){
  var result = "";

  for(var word of s.split(" ")) {
    for(var i in word) {
      result += word[i][parseInt(i) % 2 == 0 ? "toUpperCase" : "toLowerCase"]();
    }
    result += " ";
  };

  return result.slice(0, -1);
}

console.log("결과 : " + toWeirdCase("try hello world"));

for in 반복문은 : for (var array값 in array){}
이렇게 사용한다. array값은 i번째로도 사용이 가능하다.

map(.ver)

function toWeirdCase(s){
 return s.split(' ').map(i =>
i.split('').map((j, key) => key % 2 === 0 ? j.toUpperCase() : j).join('')).join(' ')
}

console.log("결과 : " + toWeirdCase("try hello world"));

map을 사용하는방법은
map((a,b)=>{a[i]})인 셈이다.
따라서 map으로 배열을 돌때 안에있는 배열를 돌면서 key가 2일때 바꿔주고, 다시 배열로된아이들을 합치도록 하였다.

5. 오늘 배운것

이중 for문이 헷갈릴땐 가장 안에있는 반복문부터 만들어본다.
배열의 반복문을 돌리는 방법은 다양한데, for, map, for in 등이 있다.
for in은 for (var i in array){array[i}
map은 map((a,b)=>{a[b]}) 이런식으로 사용이 가능하다.
for과 map은 방법이 다소 비슷하다.

profile
은행을 뛰쳐나와 Deep Dive in javascript

0개의 댓글