function solution(a, b) {
let day = ['THU', 'FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED'];
let date = b + (a-1)*30;
let count = 0;
for (let i=1; i<=a; i++) {
if (i === 3) {
count--;
} else if ((i <= 8 && i%2 === 0) || (i > 8 && i%2 === 1)) {
count++;
}
}
let answer = day[(date+count)%7];
return answer;
}
계속 에러난 부분
: 날짜가 7로 나누어떨어졌을때 배열이 [-1]로 됐기 때문,, 자바스크립트에선 Python 같이 Array[-1]과 같은 접근 방식은 사용할 수 없다.
let answer = day[(date+count)%7 - 1];
return answer;
배운 것
function solution(arr, divisor) {
let answer = [];
for (let i = 0; i < arr.length; i++) {
let a = Number(arr[i])
let b = Number(divisor)
if (a % b === 0) {
answer.push(a)
}
}
if (answer.length === 0) {
answer = [-1]
}
return answer.sort((a,b) => a-b);
}
function solution(n) {
let answer = '';
for (let i=1; i<=n; i++) {
if (i%2 === 1) {
answer += '수'
} else if (i%2 === 0) {
answer += '박'
}
}
return answer;
}
function solution(participant, completion) {
let a = participant.sort()
let b = completion.sort()
for (let i=0; i<a.length; i++) {
if (a[i] !== b[i]) {
return a[i]
}
}
}
내가 푼 답안
: sort 메소드를 활용하고 싶어서 이렇게 했는데, for loop을 두번이나 돌리니까 효율성도 떨어지고, 값 비교하는 부분에서 동명이인이 2명 이상일 경우 자꾸 테스트가 실패하는 것 같았다.
배운 것
: for loop 조건이 비슷해서 합치고 싶었는데, 두 배열을 모두 정렬하면 그 부분이 해결된다는 것을 발견했다. 그리고 indexOf 메소드를 배웠다. 배열의 인덱스을 파라미터로 넣으면 해당 인덱스의 값이 배열에 있는지 찾아주고, 있다면 같은 인덱스 번호를 반환하고 없다면 -1을 반환한다.
function solution(participant, completion) {
let a = participant.sort()
let b = completion
let c = a[0]
let answer
for (let i=0; i<a.length; i++) {
if (b.indexOf(a[i]) === -1) {
answer = a[i]
}
}
if (answer === undefined) {
for(let i=1; i<a.length; i++) {
if(a[i] == c) {
answer = c
}
c = a[i]
}
}
return answer;
}
배운 것
: 처음엔 새로 값을 저장할 변수를 따로 안만들고 하나의 변수를 선언하고 거기에 값을 계속 다시 넣었는데, 그렇게 하니까 아예 실행이 안됐다. 새로운 값을 할당할 변수를 꼭 하나 더 만들어주기!
function solution(s) {
let answer = ''
let z = s.split(' ')
for (let i=0; i<z.length; i++) {
for (let j=0; j<z[i].length; j++) {
if (j%2 === 0) {
answer += z[i][j].toUpperCase()
continue
} else {
answer += z[i][j]
}
}
if (i < z.length-1) {
answer += ' '
}
}
return answer;
}
function solution(n) {
let answer = 0
let num = String(n)
for (let i=0; i<num.length; i++) {
answer += Number(num[i])
}
return answer;
}
function solution(n) {
let answer = [];
let num = String(n)
for (let i=num.length-1; i>=0; i--) {
answer.push(Number(num[i]))
}
return answer;
}
function solution(n) {
let b = []
let num = String(n)
let answer = ''
for (let i=0; i<num.length; i++) {
b.push(Number(num[i]))
}
b = b.sort().reverse()
for (let i=0; i<b.length; i++) {
answer += b[i]
}
return Number(answer)
}
function solution(n) {
let answer = 0;
let num = n
if (Math.sqrt(num)%1 === 0) {
answer = (Math.sqrt(num)+1)**2
} else {
answer = -1
}
return answer;
}
맞는 답안
: Math.min 함수를 많이 사용하던데 효율성 측면에서 이게 가장 빨라보였다.
function solution(arr) {
if (arr.length === 1)
return [-1];
let i = 0;
for (let j = 0; j < arr.length; j += 1) {
if (arr[i] > arr[j])
i = j;
}
arr.splice(i, 1);
return arr;
}
나의 틀린 답
: sort 메소드를 또 써보고 싶었는데 어디서 꼬이는 것 같다.. 문제에서 배열이 descending order로 정렬되어 있어서 당연이 내림차순으로 정렬하는줄 알았는데 그런 말은 없었기 때문에 답안 자체의 배열 순서를 바꿔서는 안됐다. 그래서 다른 변수에 할당해서 index만 찾고 싶었는데,, 문법 공부랑 CS 지식 좀 쌓아야겠다 뭐가 어디서 꼬이는지도 알수가 힘들군
function solution(arr) {
let answer = arr
let index
let sorting = arr
let min
if (answer.length === 1) {
answer = [-1]
} else {
sorting.sort(function(a, b){return b-a})
index = sorting[sorting.length-1]
min = answer.indexOf(index)
answer.splice(min, 1)
}
return answer
}
=> 알고리즘 문제풀이 재밌다,, 고수들 모범 답안 보면서 많이 배워야겠다!!