항해 중
어제 공부한 알고리즘 복습
function solution(a, b) {
var daysofmonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30]; //11월까지만 필요
var dayoftheweek = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU'];
var days = b-1;
for (var i =0; i<a-1; i++){
days += daysofmonth[i];
}
var answer = dayoftheweek[days%7];
return answer;
}
@ 바뀌지 않는 변수들은 const로 선언하는게 좋지 않았을까 싶다.
@ 날짜에 관한 문제여서 Date 관련 함수들을 써서 풀었어도 됐을 것 같다.
function solution(arr, divisor) {
var temp = []; //빈 어레이
var idx = 0;
for (var i =0; i<arr.length; i++){
if ( arr[i] % divisor == 0)
{
temp[idx] = arr[i];
idx++;
}
}
var answer = temp.sort(function(a, b){ //문자로 받아들여서 이렇게 해야된다고하네
return a-b;
});
if (answer.length == 0)
return [-1]; //이게 되네
return answer;
}
@ 3~10번줄 수정버전
for (let e of arr)
if ( e % divisor == 0) temp.push(e)
@ 근데 이걸 더 잘 할 수 있는 함수 filter가 있다. 조건에 맞는 원소만 필터링해서 새로운 배열에 넣어줄 때 쓴다고 한다.
화살표 함수까지 써서 더욱 간단하게. 화살표 함수가 정확히 뭔지는 다음에 다른 글에 써봐야겠다.
temp = arr.filter(x => x % divisor == 0)
@ sort()로 배열 안의 숫자들을 정렬하더라도 sort는 쟤네를 문자로 받아들여서 12를 3보다 더 작다고 판단한다고 한다. 앞이 1이라서. 그래서 저렇게 뒤에 뭘 더 붙여야 한다. a-b 리턴하면 오름차순, b-a 리턴하면 내림차순.
@ sort()함수 쓴 부분도 화살표 함수 써서하면
sort((a, b) => a-b)
function solution(n) {
var answer = ''; //빈문자열 ""도 가능
for (i = 1; i<=n; i++){
if (i%2 == 1)
answer+='수';
else
answer+='박';
}
return answer;
}
@ 지금 다시하면
for (i = 1; i<=n; i++)
(i%2 ? answer+='수' : answer+='박')
이렇게 3항연산자 썼을 것 같다.
function solution(participant, completion) {
let part2 = participant.sort()
let comp2 = completion.sort()
for (let i = 0; i< part2.length; i++){
if (part2[i] != comp2[i]) return part2[i];
}
}
@ 어제 풀 당시엔 답은 맞췄는데 수행시간이 너무 길어서 통과 못했던 문제. 어떻게 풀어야할지 쉬운 방법이 떠오르지 않았다가 팀원꺼보고 힌트얻고 수정해 봄. 정렬한 뒤에 처음부터 순서대로 비교하다가 다를 때가 정답.
function solution(s) {
let arr = s.split(' ');
let answer = '';
for (let i = 0; i <arr.length; i++){
for (let j = 0; j <arr[i].length; j++)
if (j % 2 == 0){
answer+=arr[i][j].toUpperCase();
//arr[i][j] = arr[i][j].toUpperCase(); //왜 이렇게 하면 바뀐게 안들어가고 그대로 일까?
//console.log(arr[i][j]);
}
else{
answer+=arr[i][j].toLowerCase();
//arr[i][j] = arr[i][j].toLowerCase();
}
if (i != arr.length -1) answer+= ' '
}
return answer;
}
@ 이거도 해맸던게
arr[i][j] = arr[i][j].toUpperCase();
이 부분에서 arr의 값이 대문자로 안바뀌고 그대로 있다. 리턴한 대문자가 들어가야 맞는거 아닌가? 질문 올려봐야겠다.
function solution(n)
{
let sum = 0;
while (n/10 != 0){
let l = n%10;
n = Math.floor(n/10)
sum += l;
}
let answer = sum;
return answer;
}
@ 이 문제는 별거 없었다. 여기서 쓴 10으로 나눠주면서 숫자의 한자리씩 구하는 while문은 이 뒤로도 계속 쓰긴했는데, 뭔가 함수를 쓰는 방법이 있을 거 같긴하다. 지금 생각해보니 숫자를 문자로 바꾼 다음 인덱스로 접근해도 됐긴하겠다.