[문제1]
https://www.acmicpc.net/submit/10818
로그인
www.acmicpc.net
[나의 코드]
let fs = require("fs");
let input = fs.readFileSync("dev/stdin").toString().split("\n");
let n = Number(input[0]);
let temp=input[1].split(" ")
let array=[]
for(i=0;i<temp.length;i++){
array.push(Number(temp[i]))
}
console.log(`${Math.min(...array)} ${Math.max(...array)}`)
풀면서도 이게 최선은 아니겠구나 싶었음... 입력 받은걸 굳이 배열로 만든다음에 그것을 for문 돌려서 숫자로 변형시키고 굳이 다시 스프레드 문법 이용해서 min, max 구하는 구차한 과정들...
[인사이트]
let fs = require("fs");
let input = fs.readFileSync("input.txt").toString().split("\n");
let n = Number(input[0]);
let array=input[1].split(" ").map(Number)
console.log(`${Math.min(...array)} ${Math.max(...array)}`)
해설강의는 조금 다른 방법으로 풀었지만 참고해서 위의 코드로 리팩토링을 하는것이 가능했다. for문을 사용하지 않고 바로 문자로 바꿔서 배열로 저장!
[인사이트2] : reduce를 이용한 풀이 방법
let fs = require("fs");
let input = fs.readFileSync("dev/stdin").toString().split("\n");
let n = Number(input[0]);
let array=input[1].split(" ").map(Number)
let min = array.reduce((a,b)=>Math.min(a,b))
let max = array.reduce((a,b)=>Math.max(a,b))
console.log(min +" "+max)
reduce를 이용한 풀이가 가장 깔끔하다고 생각!
[문제2]
https://www.acmicpc.net/submit/2562
로그인
www.acmicpc.net
[나의코드]
let fs = require("fs");
let input = fs.readFileSync("dev/stdin").toString().split("\n");
const array=input.map(Number)
const max=Math.max(...array)
const maxIndex=array.indexOf(max)+1
console.log(max+"\n"+maxIndex)
[문제3]
https://www.acmicpc.net/problem/3052
3052번: 나머지
각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.
www.acmicpc.net
[나의코드](틀림)
let fs = require("fs");
let input = fs.readFileSync("dev/stdin").toString().split("\n");
let array=input.map(x=>Number(x)%42)
let set = new Set(array)
console.log([...set].length)
무조건 맞출줄 알았는데 자꾸 30% 정도에서 틀렸다고 떠서 예외처리 못한거라고 생각했다. 아무리 생각해봐도 빠뜨린 부분이 생각이 안나서 결국 해설 봄...ㅠ
[해설코드]
let fs = require("fs");
let input = fs.readFileSync("dev/stdin").toString().split("\n");
let array=input.map(Number)
let set = new Set();
for(let i=0;i<10;i++){
set.add(array[i]%42)
}
console.log(set.size)
내가 쓴 코드와 해설코드가 본질적으로 뭐가 다른지 잘 모르겠음... gpt도 두 코드는 같다고 하는데...
[문제4]
https://www.acmicpc.net/problem/4344
4344번: 평균은 넘겠지
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
www.acmicpc.net
[나의코드]
let fs = require("fs");
let input = fs.readFileSync("input.txt").toString().split("\n");
let n = Number(input[0])
let answer=""
for(i=1;i<=n;i++){
let array=(input[i].split(" ").map(Number))
let num=array[0]
let average=(array.reduce((a,b)=>a+b)-num)/num
let cnt=0;
for(j=1;j<=array.length;j++){
if(array[j]>average){
cnt++
}
}
answer=answer+((cnt*100/num).toFixed(3)+"%")+"\n"
}
console.log(answer)
처음에는 콘솔을 한번에 안찍고 여러번 출력해서 런타임에러 떠서 한번에 모아서 찍는걸로 수정함. 마음에 안드는 부분은 reduce 로 평균구하는 부분에서 초기값을 배열의 두번쨰부터 reduce 를 사용할 수 있으면 좋을거 같은데 방법이 안떠올라서 그냥 초기값을 한번 빼줘서 평균을 구했음
[문제5]
https://www.acmicpc.net/problem/1546
1546번: 평균
첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보
www.acmicpc.net
[나의코드]
let fs = require("fs");
let input = fs.readFileSync("input.txt").toString().split("\n");
let n = Number(input[0])
let array=input[1].split(" ").map(Number)
let max=Math.max(...array)
let newArray=array.map((item)=>item*100/max)
let newAverage=newArray.reduce((a,b)=>a+b)/array.length
console.log(newAverage)
한방에 정답><
[인사이트]
'알고리즘' 카테고리의 다른 글
프로그래머스 > 완전 탐색 > 소수 찾기 (0) | 2023.03.31 |
---|---|
자바스크립트 문자열 문제풀이 (0) | 2023.03.24 |
자바스크립트 반복문 문제풀이 (0) | 2023.03.23 |
자바스크립트 조건문 문제풀이 (0) | 2023.03.21 |
[알고리즘 코딩테스트](2)자료구조-2: 구간 합(3) (0) | 2023.02.17 |