function solution(n) {
for (i=1; i<n; i++) {
if (n % i === 1) {
return i
}
}
}
항상 배열만을 고집해서 배열의 min값을 찾으려다가 어차피 i가 오름차순으로 증가하니 제일 먼저 나온 i를 반환
function solution(absolutes, signs) {
for (i=0; i<absolutes.length; i++) {
signs[i] ? absolutes[i] = absolutes[i] : absolutes[i] = -absolutes[i]
}
return absolutes.reduce( (a,c) => a+=c, 0)
}
배열의 값을 바꿔주고 reduce를 하는 게 아니라
let ans = 0; 를 만든 후에 거기에다가 각 값을 더하거나 빼주면 됨
signs[i] ? answer += absolutes[i] : answer -= absolutes[i]
가장 간단한 방법으로는 reduce에는 index 인자로 들어가므로 곧바로 return
return absolutes.reduce((acc, val, i) => acc + (val * (signs[i] ? 1 : -1)), 0);
// 단순하게 그냥 10까지 반복하면서
// 자연수 중 갖고 있지 않은 수들을 더 해주면 됨
function solution(numbers) {
let ans = 0;
for (i=0; i<10; i++) {
if (!numbers.includes(i)) {
ans+=i
}
}
return ans
}
// 생각해보면.. 정말 1부터 9까지의 합에서 주어진 배열의 reduce 값을 빼줬으면 됐음
function solution(numbers) {
return 45 - numbers.reduce((cur, acc) => cur + acc, 0);
}
function solution(a, b) {
let ans = 0;
for (i=0; i<a.length; i++) {
ans += a[i]*b[i]
}
return ans
}
// 사용하지 않을 cur는 _로 두고 i를 활용
function solution(a, b) {
return a.reduce((acc, _, i) => acc += a[i] * b[i], 0);
}
function solution(left, right) {
let ans = [];
let div = 1
for (i=left; i<=right; i++) {
for (j=1; j<=i; j++) {
if (i%j === 0) {
div *= -1
}
}
ans.push(div*i)
// div를 다시 1로 만들어줘서 카운팅 가능하게
div = 1
}
return ans.reduce ( (a,c) => a+=c)
}
팁!
'제곱근이 정수면 약수의 갯수가 홀수다..'
function solution(left, right) {
var answer = 0;
for (let i = left; i <= right; i++) {
// 제곱근이 홀수이면 약수의 갯수가 홀수 즉, 음수
if (Number.isInteger(Math.sqrt(i))) {
answer -= i;
} else {
answer += i;
}
}
return answer;
}
function solution(price, money, count) {
let all_price = 0;
for (i=1; i<=count; i++) {
all_price += i*price
}
return all_price > money ? all_price - money : 0
}
아무런 검색도, 도움도 없이 여태 배운 지식으로 푼 문제.. 좀 뿌듯하군
function solution(n) {
return parseInt( ([...n.toString(3)].reverse().join('')), 3 )
}
처음엔 cnt라는 정수를 활용해서 +를 해주다가 길이가 더 정확할 것 같아서
>= 까지 포함하여 넣고 길이를 반환
function solution(d, budget) {
d = d.sort((a,b) => a-b)
let ans = [];
for (i=0; i<d.length; i++) {
budget -= d[i]
if (budget >= 0) ans.push(budget)
}
return ans.length
}
function solution(d, budget) {
d.sort((a, b) => a - b);
while (d.reduce((a, b) => (a + b), 0) > budget) d.pop();
return d.length;
}
반대로 접근해서, while문을 통해 큰 값을 빼다가 budget보다
작거나 같아지는 순간 남아있던 d의 길이를 반환
function solution(n, arr1, arr2) {
// 이진수로 바꿨을 때
// 한 개 라도 1이라면 그것은 곧 #
// 둘 다 없어야만 (0) 이여야만 길
// 그때 0은 공백
// #은 #대로 해서 출력
let ans = [];
for (i=0; i<arr1.length; i++) {
ans.push(String(Number(arr1[i].toString(2))+Number(arr2[i].toString(2))))
}
for (i=0; i<ans.length; i++) {
while (ans[i].length !== n) ans[i] = 0 + ans[i]
}
for (i=0; i<ans.length; i++) {
ans[i] = ans[i].replace(/[1-2]/g, "#")
ans[i] = ans[i].replace(/0/g, " ")
}
return ans
}
조금 난잡하지만 그래도 풀었다는데 의의를 두고 싶다..
각 행을 이진수로 바꿔 두 개를 더해주고 string형으로 바꿔 ans에 push 하였다.
여기서 string으로 바꿔준 이유는 숫자끼리 더해서 각 자리가 둘 중 하나라도 0인 건 0 으로 내비두고 for문을 써주기 위해서이다.
원래는 함수를 만들어도 되지만 TC의 사이즈가 작으므로 반복문을 통해 앞에 0을 넣어준 후
각 자리를 바꾸는데 처음엔 replaceAll을 썼지만 replace를 통해 정규표현식을 사용하여 바꿔주었다 여기서 map을 활용해도 됨
function solution(n, arr1, arr2) {
return arr1.map((v, i) => addZero(n, (v | arr2[i]).toString(2)).replace(/1|0/g, a => +a ? '#' : ' '));
}
const addZero = (n, s) => {
return '0'.repeat(n - s.length) + s;
}
다들 코드를 보니 되게 짧게 푸셨는데 이 코드가 가장 직관적이고 좋았다.
addZero라는 함수를 만들어서 arr1은 map을통해 이진수로 바꾼 v에 나머지는 arr2[i]에 0을 더해준 후, 0이 이라면 #으로 0이 아니라면 공백으로 바꾸었다.
전에 풀었던 문제로 영어숫자문자들을 배열에 넣어준 후
그 배열을 순회하며 주어진 문자열에서 해당하는 값을 숫자로 바꾸면 된다.
function solution(s) {
let numbers = ['zero','one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
// 숫자의 반복을 통해 각 자리가 문자열 s에 존재한다면 인덱스로 바꿔줌
numbers.forEach( (v, i) => {
s = s.replaceAll(v, i)
})
return Number(s)
}
정말 놀랍게도 풀고 제출을 했는데 다른 사람 풀이 1등이 내가 푼 코드랑 똑같은 코드였다.. 나 꽤나 성장한 걸지도..
function solution(numbers) {
let ans = [];
for (i=0; i<numbers.length; i++) {
for (j=i+1; j<numbers.length; j++) {
ans.push(numbers[i]+numbers[j])
}
}
ans.sort((a,b) => a-b)
return [...new Set(ans)]
}
설마 삼중 포문을 쓰겠어? 했는데 진짜로 3중 포문을 쓰는 함수
function solution(nums){
let answers = 0;
for(let i = 0; i< nums.length-2; i++){
for(let j = i+1; j < nums.length-1; j++){
for(let k = j+1; k < nums.length; k++){
let sums = nums[i]+nums[j]+nums[k];
if(isPrime(sums))
answers += 1;
}
}
}
return answers;
}
function isPrime(num){
for(let j = 2; j <= Math.sqrt(num); j++){
if(num % j === 0)
return false;
}
return true;
}
진짜 거의 한 두 시간동안 어찌저찌 풀긴 했다.. 근데 당연히도 TC가 20만까지 나오니 런타임에러가 나올 줄 알았다.
function solution(N, stages) {
let 숫자갯수 = 0;
let ans = new Map();
for (i=1; i<=N; i++) {
for (j=0; j<stages.length; j++) {
if(stages[j] === i) {
숫자갯수+=1
ans[[i]] = 숫자갯수
} else if (stages[j] > i) {
ans[[i]] = 숫자갯수
}
}
숫자갯수 = 0
}
let res = Object.values(ans)
for (i=1; i<=N; i++) {
ans[[i]] = (Object.values(ans)[i-1]/stages.length)
stages.length -= res[i-1]
}
let 객체를배열 = Object.entries(ans)
정답 = 객체를배열.sort( (a,b) => b[1] - a[1])
let 진짜정답 = [];
for (i=0; i<정답.length; i++) {
진짜정답.push(Number(정답[i][0]))
}
return 진짜정답
}
function solution(N, stages) {
let result = [];
for(let i=1; i<=N; i++){
// 자신보다 큰 애의 길이를 분모
let 분모 = stages.filter((x) => x >= i).length;
// 자신에 해당하는 애를 분자
let 분자 = stages.filter((x) => x === i).length;
// 값을 넣어주고
result.push([i, 분자/분모]);
}
// 소팅 후
result.sort((a,b) => b[1] - a[1]);
// map을 통해 결과값 반환
return result.map((x) => x[0]);
}
function solution(dartResult) {
var score = 0;
var answer = [];
var index = 0; // 숫자 담을 변수
for(let i=0; i<dartResult.length; i++) {
if(dartResult[i] >= 0 && dartResult[i] <= 9 ) { //숫자일 경우
if( dartResult[i] == 1 && dartResult[i+1] == 0 ) {
// 10일 경우 10으로 만들어주고 0을 건너뛰기 위해 (한 칸 건너뛰기) i++ 해줌.
index = 10;
i++;
} else { // 10이 아니라면 그 값을 그대로 활용
index = dartResult[i];
}
// ★ "숫자가 아닐 경우엔 index값은 dartResult[i]로 숫자" ★
} else if(dartResult[i] === "S") { // 1제곱
answer.push(index);
} else if (dartResult[i] === "D") { // 2제곱
answer.push(Math.pow(index,2));
} else if (dartResult[i] === "T") { // 3제곱
answer.push(Math.pow(index,3));
} else if (dartResult[i] === "#") {
// 아차상이 나올시 방금 쏜 점수는 음수가 됨
answer[answer.length-1] *= -1;
} else if (dartResult[i] === "*") {
// 스타상이 나올 땐 방금 쏜 점수과 아까 쏜 점수 두 개가 모두 두 배가 됨
answer[answer.length-1] *= 2;
answer[answer.length-2] *= 2;
}
}
// '-1': NaN 는 스타상에서 앞전 인덱스가 없을 때 발견됨, 대신 계산에는 영향 X
return answer.reduce( (a,c) => a+=Number(c))
}
굉장히 어렵지만 if문을 잘 짠다면 해결할 수 있는 문제
여기에서 신기했던 건 if문을 숫자와 문자로 둬서 숫자가 나올 때만 그값을 인덱스로 활용함 (잘 끊어침)