Loops
Task
Complete the vowelsAndConsonants function in the editor below. It has one parameter, a string, $s$, consisting of lowercase English alphabetic letters (i.e., a through z). The function must do the following:
- First, print each vowel in $s$ on a new line. The English vowels are a, e, i, o, and u, and each vowel must be printed in the same order as it appeared in $s$.
- Second, print each consonant (i.e., non-vowel) in $s$ on a new line in the same order as it appeared in $s$.
Input Format
Locked stub code in the editor reads string $s$ from stdin and passes it to the function.
Output Format
First, print each vowel in $s$ on a new line (in the same order as they appeared in $s$). Second, print each consonant (i.e., non-vowel) in $s$ on a new line (in the same order as they appeared in $s$).
Sample Input 0
javaScript
Sample Output 0
a
a
i
o
o
j
v
s
c
r
p
t
l
p
s
Dev
'use strict';
process.stdin.resume();
process.stdin.setEncoding('utf-8');
let inputString = '';
let currentLine = 0;
process.stdin.on('data', inputStdin => {
inputString += inputStdin;
});
process.stdin.on('end', _ => {
inputString = inputString.trim().split('\n').map(string => {
return string.trim();
});
main();
});
function readLine() {
return inputString[currentLine++];
}
/*
* Complete the vowelsAndConsonants function.
* Print your output using 'console.log()'.
*/
function vowelsAndConsonants(s) {
const vewels = ['a', 'e', 'i', 'o', 'u'];
let sArray = s.split("");
for (let i = 0; i < sArray.length; i++) {
for (let j = 0; j < vewels.length; j++) {
if (sArray[i] === vewels[j]) {
console.log(sArray[i]);
break;
}
}
}
for (let k = 0; k < sArray.length; k++) {
for (let j = 0; j < vewels.length; j++) {
if (sArray[k] === vewels[j]) {
break;
}
if (j === 4) console.log(sArray[k]);
}
}
}
Study
Javascript 문자열 자르기
splice
splice는 특정 시작 인덱스부터 끝 인덱스까지에 값을 추가하거나 그 자리에 있는 값을 삭제할 수 있는 메서드이다.
myArray = [1, 2, 3, 4, 5];
myArray.splice(2, 3);
Return [1, 2]
var arr = ["A","C","D","A","E","F","A"];
var arr_splice = arr.splice(1,3); // 1번부터 3개의 ["C","D","A"]를 꺼낸다. 리턴값은 꺼낸값
console.log(arr); // ["A", "E", "F", "A"]
var arr2 = ["A","C","D","A","E","F","A"];
var arr2_splice = arr2.splice(1,3,"a"); // 1번부터 3개의 ["C","D","A"]를 삭제하고 그자리에 "a"를 삽입한다. 리턴값은 꺼낸값
console.log(arr2); // ["A", "a", "E", "F", "A"]
3번째 인자값에 값을 전달하면 삭제한 위치에 전달된 값을 전달한다
인자값을 하나만 전달하면 그 인덱스를 포함한 뒤에있는 모든 원소를 삭제한다.
var arr = ["A","C","D","A","E","F","A"];
arr.splice(3); // 3번 인덱스를 포함한 뒤의 모든 원소 ["A","E","F","A"] 제거
console.log(arr); // ["A", "C", "D"]
indexOf와 결합해서 사용하면 특정 값을 찾아 삭제하거나 변경할수도 있다.
// 삭제
var arr = ["A","C","D","A","E","F","A"];
arr.splice(arr.indexOf("A"),1); // "A"를 찾아서 삭제한다.
console.log(arr); // ["C", "D", "A", "E", "F", "A"]
// 변경
var arr = ["A","C","D","A","E","F","A"];
arr.splice(arr.indexOf("A"),1,"a"); // "A"를 찾아서 "a"로 변경한다.
console.log(arr); // ["a", "C", "D", "A", "E", "F", "A"]
값이 여러개가 포함되어 있을경우 반복문 루프를 돌려서 모두 삭제할 수도 있다.
for(let i = 0; i < vewels.length ; i++) {
while(true) {
const search = sArray.indexOf(vewels[i]);
if (search != -1) {
console.log(vewels[i]);
sArray.splice(search, 1);
}
else break;
}
}
Conclusion
억지로 결과를 뽑아냈다. 문자열 길이로 반복문 제어 중 모음을 먼저 출력하고 출력한 모음을 배열에서 삭제하는 바람에 원하는 결과가 제대로 나오지 않았다. 굉장히 초보적인 실수였지만, 당황스럽게 문제를 바로 발견하지 못하였다.
문자열을 삭제하지 않고, 재배열하여 출력하는 방법이 더 효율적일거 같다.