JAVASCRIPT/코딩테스트 18

[프로그래머스] 1단계 - 삼총사

1. 문제 설명 2. 답안 const NUM = 3; function solution(number) { let answer = 0 const tmp = [] const backtrack = (cur) => { // tmp 길이가 3이면 if (tmp.length === NUM){ // tmp의 합을 계산 후 0이면 answer에 1 더하기 answer += tmp.reduce((a,b)=> a + b) ? 0 : 1 return } // tmp 만들기 for (let i = cur; i < number.length; i++){ tmp.push(number[i]) // 재귀호출할 때마다 cur을 사용하여 다음 인덱스로 이동 backtrack(i + 1) // 다음 경우를 탐색하기 전 현재 요소를 제거 tm..

[프로그래머스] 0단계 - 등수 매기기

1. 문제 설명 2. 답안 function solution(score) { let arr = [] for(let item of score){ let [eng, math] = item arr.push((eng + math) / 2) } let answer = [...arr].sort((a,b) => b - a) return arr.map(x => answer.indexOf(x) + 1) } - 처음에 reduce로 객체 만들어서 시도하였으나,, 그렇게 하니까 중복된 값이 사라져서 다른 방법으로 시도,, - sort는 원본 배열을 수정하므로 얕은 복사를 통해 answer에 할당 - indexOf는 값에 해당하는 첫번째 인덱스를 반환해주니 중복된 값도 그 첫번째 인덱스로 들어가서 해결!

[프로그래머스] 0단계 - 캐릭터의 좌표

1. 문제 설명 2. 답안 function solution(keyinput, board) { let answer = [0,0] for (let item of keyinput){ switch (item){ case 'left' : if (-answer[0] < board[0] / 2 - 1) answer[0]--; break; case 'right' : if (answer[0] < board[0] / 2 - 1) answer[0]++; break; case 'up' : if (answer[1] < board[1] / 2 - 1) answer[1]++; break; case 'down' : if (-answer[1] < board[1] / 2 - 1) answer[1]--; break; } } return ..

[프로그래머스] 0단계 - 삼각형의 완성조건 (2)

1. 문제 설명 2. 답안 function solution(sides) { return Math.min(...sides) * 2 - 1 } - 어떻게 접근해야하는지도 감이 안 잡혔던 문제.. 다른 사람 풀이 보니까 이렇게 한 줄로 적혀있어서 육성으로 헐... 이랬는데 역시나 수학 문제였던 것 ㅠㅠㅠ 수학이 사람 잡네😭 - 댓글에 적혀있던 풀이 sides = [a,b] 이고(a>b라고 가정, 이는 sort해주면됩니다.) 새로 주어지는 변의 길이를 c라고 했을 때, a가 가장 긴변인 경우 즉 a > c인 경우 b + c > a > c 이므로 a > c > a-b 이기 때문에 c의 정수 갯수는 b-1개입니다. / c가 가장 긴변인 경우도 이런식으로 하면 되고 a=c 인경우 한가지 이므로 2b-1이 나옵니다.

[프로그래머스] 0단계 - 구슬을 나누는 경우의 수

1. 문제 설명 Hint - 확실히 입문 들어오니까 수학적인 문제가 많이 보인다... 저 느낌표 저거 너무 오랜만에 봐서 이름도 까먹었다,, 팩토리얼 너,, 이놈,, 내가 학창시절 때 많이 싫어했었다,, - 팩토리얼 개념도 까먹어서 도저히 어떻게 푸는 문젠지 접근조차 불가능해 구글링을 해 가장 내가 이해하기 좋은 답안들을 가지고 왔다 2. 답안 1 function solution(balls, share) { let x = 1 let y = 1 let z = 1 for(let i = 1; i

[프로그래머스] 0단계 - 피자 나눠먹기(2)

1. 문제 설명 2. 답안 function solution(n) { // 피자 한 판을 놓고 let pizza = 1; // 피자 개수 * 조각 개수 후 n을 나눈 나머지가 0이 될 때까지 피자 판 수를 더하기 while (pizza * 6 % n) { pizza++; } // 0이 되면 리턴 return pizza; } while을 써서 pizza의 개수를 늘려야겠다.. 라고 까지는 생각을 했으나 그 다음이 문제,, 계속 고민하다가 구글링 ㅠㅠ 이렇게 하면 되는 구나,, 오늘도 배워갑니다

[프로그래머스] 0단계 - 최빈값 구하기

1. 문제 설명 2. 답안 function solution(array) { // prev: 누적된 결과를 나타내는 객체, curr: 현재 처리 중인 배열 요소 let obj = array.reduce((prev, curr) => { // prev 객체에 curr 요소가 이미 존재한다면 1 증가시킴, 없다면 1로 초기화 prev[curr] = ++prev[curr] || 1; // 누적된 결과 객체 반환 return prev; }, {}); // 초깃값으로 빈 객체 사용 // values 중 제일 큰 값 저장 let maxValue = Math.max(...Object.values(obj)) // 최빈값이 여러 개일 경우 -1 반환 if (Object.values(obj).filter(item => ite..

[프로그래머스] 0단계 - 분수의 덧셈 (유클리드 호제법)

0. 문제 설명 - 코테 문제를 풀다가 갑자기 기약분수가 튀어나왔다.. 너무 오랜만에 보는 단어라 순간 기약분수가 뭐지..? 하고 검색해봤는데 초등학교 5학년 때 배우는 수학.. ㅋㅋ 다 까먹었다 🤣 - 손으로 풀라하면 풀 수 있는데 이걸 코딩으로 구현해야 하니 막막함이 올라왔다.. 그래서 구글링 후 유클리드 호제법이라는 알고리즘을 학습! 1. 유클리드 호제법이란? - 두 양의 정수, 혹은 두 다항식의 최대공약수를 구하는 방법 - 2개의 자연수(또는 정식) a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a>b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이 성질에 따라, b를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이..