알고리즘 문제 풀기(프로그래머스)
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
란 배열은 중복되어 말한 사람이 있는지 판별하기 위한 배열index
1번부터 돌며 마지막 단어의 끝부분과 다음 단어의 첫 부분이 일치하는지와 중복되지 않았는지 검사하고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];
}
words
를 reduce
시킨다answer
를 ||
를 통해 거르는데 이때 slice
를 통해 배열을 잘라와 indexOf
를 통해 중복을 걸러내고 다음 첫번째 글자와 비교하여 인덱스를 answer
에 할당할지 판단한다.reduce
의 리턴값을 현재 값의 맨 마지막 글자로 두어 다음 계산이 돌아갈 때 첫글자와 비교할 수 있게 한다.React
동적인 컨텐츠를 만드는데 State를 만드는 걸 자꾸 생각하지 못한다.
컴포넌트 유기성도 계속 신경쓰며 만들어야 하는데 자꾸 무언갈 만들어보며 늘려야 될 것 같다.