코딩기록

항해 10일)JS - 21프로그래머스 이상한 문자 만들기 본문

항해99/챕터2 알고리즘

항해 10일)JS - 21프로그래머스 이상한 문자 만들기

뽀짝코딩 2022. 1. 19. 13:37
728x90

 

 

 

답안

1번

//s = "try hello world";

function solution(s) {
  var answer = s.split(" ");   //split으로 공백을 기준으로 나눠서 배열에 넣는다.['try','hello','world']
  let result = [];             //빈 배열객체를 만들고
  for(let an of answer){       // 배열 answer에 있는 값을 하나씩 가져온다.
     for(let i=0; i<an.length; i++){  //for문으로 짝수일경우와 홀수일경우 돌면서 하나씩 비교한다.
         
         if(i%2 === 0){               // 나머지가 0이면 
         	result.push(an[i].toUpperCase()); //toUpperCase()로 짝수자리만 대문자로 바꾸고 
                                              //push()로 배열 뒤에 엘리먼트 추가한다.
         }else{ 
            result.push(an[i].toLowerCase()); // 나머지가 0이 아니면 toLowerCase로 홀수를
         }                                    // 소문자로 바꾸고 push()로 배열 맨뒤에 추가한다.
     }
     result.push(" ");                    //한 단어 끝나면 push()로 띄어쓰기 추가.
   }                                      
   result.pop();                         //마지막 띄어쓰기 없애고
  
   return result.join("");                //배열 문자열로 합친다.
}

 

 

2번

function solution(s) {

	// 답 저장 변수
    let answer = '';
    
    // s파라미터로 가져온 문자는 "try hello world" 
    // 문자를 공백을 기준으로 나눠서 배열에 담는다.
    // [] [] [] 담긴 모양
    // 배열로 담아서 인덱스로 홀짝을 검사하려고 한다.
    let arr = s.split(' ');

    for(let i = 0; i < arr.length; i++){
    	// [] [] [] 안에서도 ['t,' 'r', 'y']로 나눠준다.
        let newarr = arr[i].split('');
        // 나중에 더할 떄 try hello로 중간에 공백이 필요함으로 공백을 배열에 넣어준다.
        newarr.push(' ');

		// index 값을 이용하려고 reduce를 사용했다.
        let prac = newarr.reduce((acc, cur, index, arr) => {
       		//index가 짝수면 대문자, 홀수면 소문자
            if ( index % 2 === 0){
            	// 해당 조건에 맞는 배열의 현재 엘리먼트를 바꿔준다.
                cur = cur.toUpperCase();
            } else {
                cur = cur.toLowerCase();
            }
            // 문자로 선언해놓은 answer변수에 반복적으로 넣어준다.
            answer += (cur);
        }, 0);
    };
	
    // 아까 공백을 추가했었는데 맨 마지막 자리는 필요없으니까 빼준다.
    answer = answer.slice(0, -1);
    // ""를 앞뒤로 추가해준다.
    return "" + answer + "";
}

*팀원분의 답안이다

 

 

 

 

 

 

 

 

※알아야할것※

1. toUpperCase(), toLowerCase()

문자열의 알파벳 변환

   > 문자열.toUpperCase()  모두 대문자 변환

   > 문자열.toLowerCase() 모두 소문자 변환

 

2. for in문

for in문은 해당 객체의 모든 열거할 수 있는 프로퍼티(enumerable properties)를 순회할 수 있도록 해줌.

열거할 수 있는 프로퍼티란 내부적으로 enumerable 플래그가 true로 설정된 프로퍼티를 의미한다.

 

3. for of 문

반복할 수 있는 객체(iterable objects)를 순회할 수 있도록 해주는 반복문

JS반복할 수 있는 객체: Array, Map, Set, arguments 객체 등

for / of문은 익스플로러에서 지원하지 않음.

 

 

 

 

2. for / in문

for (변수 in 객체){
    객체의 모든 열거할 수 있는 프로퍼티의 개수만큼 반복적으로 실행하고자 하는 실행문;
}

 

1). for/ in 문으로 객체의 프로퍼티 접근

let  property = {
   name = "홍길동",
   age = 30
};

for ( let i in property) {
 	console.log(i);
};
-----------------
출력

name
age

 

3. for of문

1). for of문 + for of문과 for in문의 차이점

///////// for문 ////////
var arr = ['a', 'b', 'c'];
for (var i = 0; i < arr.length; i++) {    // 배열 arr의 모든 요소의 인덱스를 출력함.
    console.log(arr[i]);
    };
----------------------------
출력
a
b
c

/////// for / in문 ///////
var arr = ['a', 'b', 'c'];
for (var index in arr) {                // 위와 같은 동작을 하는 for / in 문
    console.log(arr[i]);            // for in문은 in 뒤에 배열이 온다.
    };                              //배열 요소의 인덱스값을 가져온다. 
----------------------------
출력
a
b
c

/////// for of문 ///////
var num = ['a', 'b', 'c'];
for (var value of num) {         // 위와 같은 동작을 하는 for of 문
    console.log(value);          // for of는 배열의 인덱스이 아니라 배열에 있는 '값'
    };                           //을 하나씩 반복해서 가져온다.
----------------------------
출력
a
b
c

*for in문은 시작과 길이를 신경쓰지 않아도 된다. 

*특정 길이부터 뽑아야 한다면 for문을 쓴다.

*for와 for in은 직접 배열과 그 인덱스arr[i]를 통해 직접접근 하지만

for of는 배열에 있는 '값'을 하나씩 반복해서 가져와 변수에 복사한다.

 

 

2). for of문과 for in문의 차이점

var arr = ['a', 'b', 'c', 'd', 'e'];
for(var idx in arr) {
	if(arr[idx] == 'a') {
		arr[idx] = 'A';
	}
}

console.log(arr);

<결과>
['A', 'b', 'c', 'd', 'e']
var arr2 = ['a', 'b', 'c', 'd', 'e'];
for(var value of arr2) {
	if(value == 'a') {
		value == 'A';
	}
}

console.log(arr2);

<결과>
['a', 'b', 'c', 'd', 'e'];

위의 for in은 인덱스 번호를 이용해 실제 배열의 값을 바꾸기 때문에 값이 바뀐다.

 

하지만 for of배열에 담긴 값을 그저 하나씩 변수에 담는 것입니다.

value = 'a';

value = 'b';

value = 'c';

값을 바꾸어도 실제 배열의 값은 바뀌지 않는다.

 

 

 

 

 

 

 

 

 

참고

*알아야할것- for, for in문, for of문 차이

https://hell-world.tistory.com/11

https://yjshin.tistory.com/entry/JavaScript-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-for-%EB%AC%B8-for-in-%EB%AC%B8-for-of-%EB%AC%B8

* 객체, 인스턴스, 프로퍼티, 메소드 설명

JavaScript - 객체(Object)에 대해 알아보자 (velog.io)

*2번답안

https://kworld.tistory.com/48?category=911112

반응형
Comments