TIL 20221228 - 173번

hoin_lee·2022년 12월 30일
0

TIL

목록 보기
138/236

오늘 공부

알고리즘 문제 풀기(프로그래머스)
https://github.com/hoinlee-moi/Algorithm

JS기본문법 다시 공부
https://github.com/hoinlee-moi/ModernJS

React 강의 듣기
https://github.com/hoinlee-moi/React_prac


요즘 연말에 여행계획 잡는다고 피로가 많아서 TIL을 자꾸 깜빡했다.
물론 그렇다고 코딩공부를 하루라도 안한 적은 없다!
꼭 계속 했고 github에 매일 어느 하나라도 공부한 부분을 새롭게 push했다

알고리즘

영어 끝말잇기 - https://school.programmers.co.kr/learn/courses/30/lessons/12981

function solution(n, words) {
    let answer = [0,0]
    let word = [words[0]];
    for(let i=1; i<=words.length-1; i++){
        let lastWord = word[word.length-1]
        if(word.includes(words[i])||lastWord[lastWord.length-1]!==words[i][0]){
            answer[0] += (i%n)+1
            answer[1] += Math.floor(i/n)+1
            break;
        }
        word.push(words[i])
    }

    return answer;
}
}

생각이 풀어지는 대로 계산했다.

  • 먼저 정답을 담을 answer를 변수로 설정하고 첫번째부터 걸리진 않으니 word란 배열에 미리 첫번째 단어를 넣는다
  • word란 배열은 중복되어 말한 사람이 있는지 판별하기 위한 배열
  • 반복문을 index1번부터 돌며 마지막 단어의 끝부분과 다음 단어의 첫 부분이 일치하는지와 중복되지 않았는지 검사하고
  • 중복되었다면 순서와 차례를 계산하여 answer배열에 넣은 후 바로 break를 걸어 게임을 끝낸다.
  • 정상적이라면 word에 계속 단어를 추가하며 끝말잇기 게임을 이어나간다.
    아래는 더욱 짧고 다른 코드를 이용해서 풀었는데
function solution(n, words) {
    let answer = 0;
    words.reduce((prev, now, idx) => {
        answer = answer || ((words.slice(0, idx).indexOf(now) !== -1 || prev !== now[0]) ? idx : answer);
        return now[now.length-1];
    }, "")
    return answer ? [answer%n+1, Math.floor(answer/n)+1] : [0,0];
}
  • wordsreduce시킨다
  • 해당 과정에서 answer||를 통해 거르는데 이때 slice를 통해 배열을 잘라와 indexOf를 통해 중복을 걸러내고 다음 첫번째 글자와 비교하여 인덱스를 answer에 할당할지 판단한다.
  • 이때 reduce의 리턴값을 현재 값의 맨 마지막 글자로 두어 다음 계산이 돌아갈 때 첫글자와 비교할 수 있게 한다.

React

동적인 컨텐츠를 만드는데 State를 만드는 걸 자꾸 생각하지 못한다.
컴포넌트 유기성도 계속 신경쓰며 만들어야 하는데 자꾸 무언갈 만들어보며 늘려야 될 것 같다.

profile
https://mo-i-programmers.tistory.com/

0개의 댓글