1. 김서방 찾기
function findKim(seoul){
var answer = seoul.indexOf('Kim');
return "김서방은 " + answer + "에 있다";
}
배열의 인덱스를 찾아서 출력하는 것이므로 https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array 에서indexOf를 찾아서 사용하였다.
처음에는 위와같이 return 값에 문자열 + answer + 문자열을 return에 직접 입력하는 방식으로 풀이하였다.
function solution(seoul) {
var answer = `김서방은 ${seoul.indexOf("Kim")}에 있다`;
return answer;
}
C언어같이 printf에 변수를 넣는 방식은 없을까 해서 인터넷에서 검색했더니 자바스크립트 ES6버전부터는 문자열을 ` `(벡틱)안에 넣고 변수는 ${변수}로 처리하면 가능하다는 글이 있어서 위와같이 작성하였다.
처음에는 ` 벡틱과 ' 작은따옴표를 헷갈려서 자꾸 오류가 났었는데 제대로 썼더니 기대하던 결과가 나오게 되었다.
2. 가운데글자 가져오기
아이디어
s의 문자열길이를 알아낸 후 글자수가 홀수일 경우 /2를 하면 가운데 글자의 자릿수 -1이 정수로 나오게 된다. 따라서 자릿수/2 + 1을 하면 가운데 글자가 몇번째인지 알 수 있다. - .length 사용
짝수의 경우 /2와 /2+1 자릿수에 있는 두 글자 모두 가운데 글자이므로 두 글자를 출력해준다.
결과 :
function solution(s) {
if(s.length%2 === 1){
var answer = s[s.length/2 + 1];
}else if(s.length%2 === 0){
var answer = s[s.length/2] + s[s.length/2 + 1];
}
return answer;
}
위와같이 코드를 작성하였을 때 문자열이 홀수일때의 값은 undefined, 짝수일때의 값은 가운데 두개가 아닌 그 다음 두개의 문자가 출력되었다.
undefined의 경우는 크롬개발자도구로 확인해 본 결과 / 연산을 하게되면 2.5가 출력되었다. C언어에서 int형에 / 연산을 했을 때 소숫점은 버리고 정수만 저장하던 방식과는 다르게 JS에서는 변수타입을 따로 설정해주지 않았으므로 소숫점까지 저장되었다. 문자열도 배열의 일종이기 때문에 소숫점의 배열요소는 가지지 못하므로 undefined가 출력되었다.
제대로 된 자릿값이 출력되지 않은 이유는 마찬가지로 배열이기 때문에 index가 0부터 시작하는 것을 간과하였다. 따라서 아래와 같이 작성하였더니 제대로 출력되었다.
function solution(s) {
if(s.length%2 === 1){
var answer = s[s.length/2 - 0.5];
}else if(s.length%2 === 0){
var answer = s[s.length/2 - 1] + s[s.length/2];
}
return answer;
}
3. 수박수박수박수
아이디어:
n이 홀수, 짝수에 따라 나누어서 생각한다.
function solution(n) {
var answer_odd = '';
var answer_even = '';
if(n%2 === 1){
for(var i=0; i<(n/2)-1; i++){
answer_odd = answer_odd + '수박'}
};
if(n%2 === 0){
for(var i=0; i<n/2; i++){
answer_even = answer_even '수박'}
};
return (n%2 === 1) ? answer_odd + '수' : answer_even;
}
처음에는 위와같이 작성하였다. 이전 답안에서 보았던 ?연산자를 이용해서 return 값을 출력하였다. 코드작성 후, 반복되는 문자열을 출력해주는 js메서드로 .repeat(n)가 있었다.
예를 들어 '수박'.repeat(2); 를 작성하면 '수박수박'이 나오게 된다. .repeat()을 이용하면 간단한 코드를 생성할 수 있다.
function solution(n) {
return ('수박').repeat(n/2) + ((n%2) ? '수' : '');
}
문자열을 더하는 것이므로 소괄호를 넣어서 + 연산을 해야한다. 소괄호를 넣지 않으면 제대로 된 결과가 나오지 않는다.
**if조건식은 0또는 1로 실행을 결정하기 때문에 if(n%2 === 1)이 아닌 if(n%2)만을 썼을 때 1또는 0의 값을 가지게 할 수 있다.
function solution(n) {
var answer_odd = '';
var answer_even = '';
if(n%2){
for(var i=0; i<(n/2)-1; i++){
answer_odd = answer_odd + '수박'}
}else{
for(var i=0; i<(n/2); i++){
answer_even = answer_even + '수박'
}
};
return (n%2 === 1) ? answer_odd +'수' : answer_even;
}
'바닐라코딩 사전학습 > 코드연습, 퀴즈, 과제' 카테고리의 다른 글
Primitive / Reference 퀴즈 (0) | 2021.12.27 |
---|---|
Scope Quiz (0) | 2021.12.27 |
Craousel (0) | 2021.12.24 |
Background Changer (0) | 2021.12.24 |
Exercise - FizzBuzz/Biggest Number/Word position (0) | 2021.12.24 |