자바스크립트 기초문제풀이(그런데기초가아닌)

걍걍규·2023년 6월 6일
0
post-thumbnail

/*
개발자 원두가 대표님께 간단한 프로그램을 만들어달라는 부탁을 받았습니다.

대표님의 어린 딸이 비밀 일기장을 쓰고 있는데, 조금 이상하게 작성되어 있다고 합니다.

다행히 대표님께서 주말 동안 고민한 결과 

알파벳 어순을 거꾸로 작성하고 있다는 것을 알아냈습니다.

각각의 비밀 일기장에서 해당하는 알파벳은 다음과 같습니다.

| a | z | d | w | g | t | j | q | m | n | p | k | s | h | v | e | y | b |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| b | y | e | v | h | s | k | p | n | m | q | j | t | g | w | d | z | a |
| c | x | f | u | i | r | l | o | o | l | r | i | u | f | x | c |  |  |

문자열 str가 주어질 때 비밀 일기를 해석한 내용을 return 하는 함수 solution을 완성해주세요.
*/
const ALPHABET = "abcdefghijklmnopqrstuvwxyz";
function solution(str) {
// let result = "";
  
//   console.log(ALPHABET.length - 1 - ALPHABET.indexOf(str[0].toLowerCase()))

//   let 대문자 = ALPHABET.length - 1 - ALPHABET.indexOf(str[0].toLowerCase());
//   console.log(ALPHABET[ALPHABET.length - 1 - ALPHABET.indexOf(str[0].toLowerCase())].toUpperCase())
  
  for(let i = 0; i < str.length; i++){
    if(str[i] == ' '){
      result = result + ' ';
    }else if(ALPHABET.indexOf(str[i]) == -1){
      result = result + ALPHABET[ALPHABET.length - 1 - ALPHABET.indexOf(str[i].toLowerCase())].toUpperCase();
    }else{
      result = result + ALPHABET[ALPHABET.length - 1 - ALPHABET.indexOf(str[i])];
    }

 }
  return result;
}

solution("R dzmg gl vzg ggvlpylppr"); 
// "I want to eat tteokbokki"
solution("Xzgh ziv xfgv"); 
// "Cats are cute"

나는 문제를 풀때 눈에 하나하나 과정이 보여야 해서 지금 주석처리 된 콘솔로그로 인덱스를 구하는 것 부터 그 인덱스가 문자로 제대로 변환이 되느냐 까지 전부 확인한다..
그냥 쭈욱 적어나가면 에러밖에 안뜨더라 아직 내가 부족해서 그러려나?
아무튼 한 문제를 푸는데 어느정도 힌트를 보는데도 엄청난 시간이 걸린다!
내가 볼 때 이런 문제들은 함수, 자료형 등등 많은 유형에 익숙해질때 까지 반복하는 수 밖에 없을 듯 하다
문제에 대해 말해보자면 일단 반복문을 이용해 문자열의 인덱스를 전부 가져와서 이것이 공백인지 소문자인지 대문자인지 세가지의 경우로 어떤 처리를 해줄 것인지 그것이 관건이다
공백일땐 그냥 공백을 더해줬고
뒤집힌 문자열의 경우는 알파벳의 길이에서 주어진 문자의 바꿀 인덱스를 빼주고 -을 또 추가로 빼줘야 올바른 문자열의 인덱스를 구할수 있었다
그렇게 소문자는 처리가 됐지만 대문자는

/*
개발자 원두는 퇴근하고 드라마 보는 것을 좋아합니다.

요즘에는 ‘이상한 변호사 우영우’ 드라마를 보고 있습니다.

드라마 주인공인 우영우는 자신을 소개할 때

“기러기 토마토? 스위스 인도인 별똥별 우영우”라고 소개합니다.

우영우식 소개법에 감명받은 원두는 이렇게 거꾸로 해도 똑같은 단어를 찾아보기 위해

친구들에게 추천을 받았습니다.

친구들에게 추천받은 word가 주어질 때

추천받은 단어가 거꾸로 해도 똑같은 단어인지 

true, false로 return하는 함수 solution을 완성하세요.
*/
function solution(word) {
  return word === word.split("").reverse().join("") 
}

solution("역삼역"); // true
solution("고양이"); // false

단어를 나눠서 배열로 만들어줬다 split
배열의 순서를 역순으로 바꿔줬다 reverse
그 배열을 사이에 공백 없이 붙혀줬다 join
그리고 비교하여 true false로 리턴해줬다

/*원두는 미국에서 개발자로 일하고 있는 외국인 친구의 결혼식에 참석했습니다.

주변 친구들과 이야기해보니,

서양에서는 결혼 후 남편의 성을 따르는 문화가 있다고 합니다.

미국에서는 여성의 70%가 결혼 후 남편 성을 따르고 있고,

영국에서는 무려 90%의 비율이 남편의 성을 따르고 있다는 것을 알게 되었습니다.

예를 들어, Harrison Ford와 Calista Flockhart가 결혼하면 Calista의 full name은 Calista Ford가 됩니다.

원두는 결혼 후 친구의 이름이 어떻게 바뀔지 궁금해져서,

결혼 후 가지게 될 full name을 알아보는 프로그램을 만들어보기로 했습니다.

나의 이름 name과 성별 sex, 배우자의 이름 spouse가 매개 변수로 주어질 때,

이름이 바뀐다면 **“결혼 후 당신의 full name은 Calista Ford입니다”**를 return 하고,

바뀌지 않는다면 **“결혼 후 당신의 full name은 바뀌지 않습니다”**를 return 하는 solution 함수를 완성해주세요.*/



function solution(name, sex, spouse){
console.log(name.split(' ')[0])
console.log(spouse.split(' ')[1])
  if(sex == 'male'){
    return '결혼 후 당신의 full name은 바뀌지 않습니다'
  }else if(sex == 'female'){
    return '결혼 후 당신의 full name은 '+name.split(' ')[0]+' '+spouse.split(' ')[1] + ' 입니다'
  }
	
	
}

solution("Harrison Ford", "male", "Calista Flockhart");
// "결혼 후 당신의 full name은 바뀌지 않습니다"
solution("Calista Flockhart", "female", "Harrison Ford");
// "결혼 후 당신의 full name은 Calista Ford입니다"

어렵다 split으로 쪼개고 인덱스 값을 넣어서 단어를 빼낼 수 있다는 사실을 생각 못했다
그래도 코드를 한번 인간말로 풀어보자면
일단 내가 남자일 경우 이름이 바뀌지 않는다는 조건을 먼저 선언했다
그 다음에는 여자일 경우의 코드를 적어주고 공백으로 갈라준 이름에 인덱스 값으로 지정해 이름과 성을 각각 따와서 바뀌게 될 풀네임을 만들어서 리턴해줬다

/*
원두에게는 중학교 때부터 친했던 친구 모카가 있습니다.

모카는 작가인데, 최근에 쓴 원고에서 오타가 발견되어 곤란을 겪고 있습니다.

알고 보니 모카가 쓰던 키보드가 고장 나서 a가 q로 작성되었는데,

다행히도 a와 q를 함께 쓰고 있는 문장은 없다고 합니다.

원두는 모카를 도와주기 위해 오타를 한 번에 수정해주는 함수를 만들려고 합니다.

오타가 있는 문장 str이 주어질 때, 수정할 오타가 있다면 수정된 문장을,

오타가 없다면 -1을 return하는 함수 solution을 완성하세요.
*/

function solution(str) {
// 여기에 코드를 작성하세요
	console.log(str.indexOf('q'))
  
  if(str.indexOf('q') == -1 || str.indexOf('Q') == -1){
    return -1;
  }else{
    str = str.replaceAll('q', 'a')
    str = str.replaceAll('Q', 'A')
    return str
  }
	
}

solution("It works, I don't know why.");
// -1
solution(
  "Qre you sleeping? Yes, now shut up. I know how to fix thqt bug on line 255."
);
// Are you sleeping? Yes, now shut up. I know how to fix that bug on line 255.

자~ indexOf에 q, Q를 넣어서 확인한다
없으면 -1이 뜰것이라 오타가 없는것이다 -1을 리턴해주겠다
그 외에는 모두 있는 문장이라고 본다
replaceALL 함수를 호출해 q 는 a로 Q는 A로 바꾼 문장을 리턴해준다

profile
안녕하시오?

0개의 댓글