[F-Lab 모각코 챌린지-25일차] - 알고리즘 일지

Big One·2023년 6월 4일
0

F-Lab

목록 보기
66/69

문제1.

The first century spans from the year 1 up to and including the year 100, the second century - from the year 101 up to and including the year 200, etc.

Examples

1705 --> 18
1900 --> 19
1601 --> 17
2000 --> 20

풀이

// 내 풀이
function century(year) {
  if(year < 101) return 1;
  const result = year % 100 === 0 ? year / 100 : Math.floor(year / 100) + 1;
  return result;
}

// 다른 사람 풀이
const century = year => Math.ceil(year/100)

느낀점

내 해결법: 100으로 나눠서 나머지가 있으면 세기를 1 더해준다. 
더 좋은 해결법: 나머지가 있으면 .. 어차피 +1  해줄거 그냥 올림 하면 되는구나 .... ㅎ 생각을 못해따 이렇게 하나를 배워가는군👆👆

문제2. Disemvowel Trolls

Trolls are attacking your comment section!

A common way to deal with this situation is to remove all of the vowels from the trolls' comments, neutralizing the threat.

Your task is to write a function that takes a string and return a new string with all vowels removed.

For example, the string "This website is for losers LOL!" would become "Ths wbst s fr lsrs LL!".

Note: for this kata y isn't considered a vowel.

풀이

내 풀이
function disemvowel(str) {
  return str.match(/[^aeiou]/gi).join('');
}

다른 풀이

function disemvowel(str) {
  return str.replace(/[aeiou]/gi, '');
}

느낀점

정규식을 사용한 것에서는 같지만, 다른 풀이에선 모음인 것을 공백으로 치환하는 방식을 사용했다.
내 풀이보다 더 나은거같다 왜냐면 다시 join으로 합쳐서 두번 작업 할 필요가 없을 것 같기 때문이다.

문제3. Mumbling

This time no story, no theory. The examples below show you how to write function accum:

Examples

accum("abcd") -> "A-Bb-Ccc-Dddd"
accum("RqaEzty") -> "R-Qq-Aaa-Eeee-Zzzzz-Tttttt-Yyyyyyy"
accum("cwAt") -> "C-Ww-Aaa-Tttt"

풀이

내 풀이
function accum(str) {
  let result = '';
  for(let i = 0; i < str.length; i++){
    let temp = str[i].toUpperCase();
    if(temp.length < i+1){
      for(let j = 1; j < i+1; j++){
        temp += str[i].toLowerCase();
      }
    }
    if(i === str.length-1) return result+=temp;
    result += (temp + '-');
  }
  return result;
}

다른 풀이
function accum(s) {
	return s.split('').map((c, i) => (c.toUpperCase() + c.toLowerCase().repeat(i))).join('-');
}

느낀점

누군가에겐 쉬울지 모르지만 X머가리인 나한텐 어렵당 ... 1레벨 올라갔는데 뭔가 생각할게 2개로 늘어난 기분이다 ..
일단 풀긴했지만 유용한 내장함수들을 좀 익히는게 좋을 것 같다. 어찌보면 풀이는 같은 방식이지만 내장함수 하나 사용으로 많이 변하게 되는 것 같다.

나의 문제 접근방식

for 문을 선택한 이유
반복 횟수를 구하는 것을 인덱스로 사용하여 문자열에서 문자를 선택하기 위함과 반복 횟수를 구하기 위함이다.

풀이 방식
for문으로 문자열 인덱스로 순회하여 인덱스에 해당하는 문자의 첫 번째를 대문자로 설정 후
다음 글자부터 인덱스+1 만큼(문자의 개수는 index+1 해야해서) 해당 인덱스를 소문자로 반복추가
문자열 중 하나의 인덱스 반복이 끝날때 마다 '-'를 붙여주고 마지막 인덱스의 경우엔 조건문으로 바로 리턴하도록

다른 풀이를 본 후, repeat()함수를 사용하면 좀 더 가독성 있게 풀 수 있다는 것을 알게되었다.
내 풀이법에서 2중 for 문을 쓸 필요없이 첫 글자에 인덱스만큼 소문자를 repeat() 해주면 됐었다.
이렇게되면 명령형식인 for문 대신 선언적인 map함수를 사용할 수 있어서 좋은 방법인 것 같다.
고쳐야 할 점
사실 map을 돌리려했지만 Array 반환인 점, join을 해서 문자열 형식으로 전환해야한다는 점이 안좋을 것 같아 for문을 택했다. Array로 바꿔서 join하는게 안좋다고 생각하는 인식을 깨주어야겠다.

오늘의 회고

음 .. 오늘은 문제를 좀 여러개 풀었지만 멘토님께서 쉬운 문제로 일단 재미를 붙여보는것을 추천하셔서 8레벨(제일 낮은거)부터 했는데 그냥 한 40문제 풀다보니 레벨업 했다.
이제 7 레벨 푼다 ... 레벨 1가는 그 날까지 .. 화이팅 .... 레벨업 할 때 마다 알고리즘에 대한 다짐을 다시 할 예정이당
아 ... 검색 알고리즘도 들어야하는데 언제듣냐 ㅠ 10시부터 들으러감 ..

profile
이번생은 개발자

0개의 댓글