오늘의 요약:
1. 황당한 SyntaxError
2. 기본 조건문 문제 끝!
3. 반복문 문제 고!
1. 조건문 기본문제 약간의 응용문제
2525번
또다시 발생한 런타임에러로 나를 매우 고생시킨 2525번문제..
처음에 괜히 쓸데없이 함수를 만들어서 안에 조건문으로 분기를 엄청 하다가 } 닫는 중괄호를 남겨두고 계속 제출을해서 SyntaxError가 계속해서 발생하였다.
한가지 느낀점은..!! 강의 제목이 조건문 문제풀이인데 꼭 if,else,else if 조건문들을 사용해서 문제를 풀어야하는 것이 아니라는 것이다. 알고리즘 문제를 풀 때 틀에박힌 사고를 한다고 생각되어서 내 자신이 너무 아쉬웠다. 분으로 전부 전환하여 하루를 초과하는지 조건문을 굳이 쓰지않고 처리할 수 있는 부분이 배울점이 많은 문제였다.
2480번
주사위 세개를 던졌을 때 주사위 결과에 따라 상금을 받는 문제이다. 경우의 수가 다양하게 있고 각각의 경우에 따라 다른 결과가 나오는 전형적인 조건문 문제이다. 처음에 마음대로 코드를 작성했다가 모범답안으로 학습하는게 낫겠다 싶어서 코드를 바꿔 제출하게되었다. 이하가 모범답안이다.
let fs = require('fs')
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
let a = Number(input[0].split(' ')[0]);
let b = Number(input[0].split(' ')[1]);
let c = Number(input[0].split(' ')[2]);
if(a === b && b === c) console.log(10000 + a*1000);
else if (a===b) console.log(1000 + a*100);
else if (a===c) console.log(1000 + a*100);
else if (b===c) console.log(1000 + b*100);
else console.log(Math.max(a,b,c)*100);
이제 반복문부분까지 왔다..!
반복문문제는 비교적 익숙하므로 빠르게 풀면서 핵심만 정리해보자.
8393번
반복문 문제이긴한데.. 등차수열이라 공식을 알아서 그냥 그렇게 풀어버렸다.
코드는 생략.
2739번
반복문의 전형적인 또다른 문제이다. 구구단 문제는 교육과정에서도 했었기에 빠르게 풀었다. 다만 한가지 주의할 점이라고 한다면 출력형식을 지켜서 출력해야한다는 것이다!! 모든 코딩테스트 문제에 다 적용된다. 답을 맞추는 것 자체보다 어떻게 해결하려고하는지에 더 집중한다고 하지만 이런 쉬운문제는 출력형식도 안지켜서 답을 틀리면 꼼꼼하지 못한 모습으로 좋지않은 인상을 줄 수 있다.
2438번
이 문제는 그렇게 어려운 문제는 아니지만,, 백준의 매운맛을 보여준 문제이다. 처음 풀이에서 런타임에러가 났는데 push를 중간에 넣어서 그랬던 것 같다. 그런데 push를 해주는 것과 += 연산자로 더해주는 것이 그렇게까지 런타임이 차이가 많이나는지 의문이다. 이 부분이 알고싶어서 오늘 문제풀이를 마무리하고 이것을 깊이 알아볼까 생각이 들었지만 일단 다 풀과나서 찾아보기로 하였다.
let fs = require('fs')
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
let N = Number(input[0]);
for (let i=0; i<N; i++){
let result = ''
for(let j=0; j<=i; j++){
// 여기를 result.push('*')에서 이하와 같이 바꾸는 것만으로도 통과가된다.
result += `*`
}
console.log(result)
result = ''
}
15552번
빠른 A+B라는데 어떻게 빠르게 하는지 문제를 읽어보자. 입력되는 문자를 끊어서 출력하는 것을 반복문을 통해 해야한다. 100만개가 있으므로 시간복잡도를 O(N)으로 하는 것이 안전할 것이다.
내가 시도한 코드이다.
let fs = require('fs')
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
let n = Number(input[0]);
for(i=1; i<=n+1; i++){
console.log(Number(input[i][0])+Number(input[i][1]));
}
이 코드는 틀렸다고 나온다. 첫 수를 n으로 놓고, n개의 숫자를 쭉 더했는데 왜 안될까..
일단 강의에서 힌트는 하나의 문자열에 모든 정보를 담았다가 한 번에 출력하는 것이었다.
또한 parseInt보다는 Number가 더 빠르게 동작한다고 하셨다.
최종코드는
let fs = require('fs')
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
let n = Number(input[0]);
let answer = '';
for(i=1; i<=n; i++){
let data = input[i].split(' ');
let a = Number(data[0])
let b = Number(data[1])
answer += a+b + '\n';
}
console.log(answer);
이렇게 된다. 하나로 모아서 출력하는 것이 백준에서는 특히 유용한 방법으로 기억해두고 사용해야겠다.
오늘은 여기까지! 다음 주에 계속 이어서 해보자.
https://fastcampus.co.kr/dev_online_upjscodingtest
UPSKILL : Javascript 코딩테스트 131개 예제 & CS지식으로 끝내기 | 패스트캠퍼스
25시간 대비 과정 / '코테 레전드' 유튜버 강사님께 핵심만 배우고 빠르게 합격하세요.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'study > Challenge' 카테고리의 다른 글
패스트캠퍼스 JavaScript 코딩테스트 131개 예제 & CS지식으로 끝내기 코딩테스트 강의 한 달 후기 (0) | 2023.05.17 |
---|---|
패스트캠퍼스 JavaScript 코딩테스트 131개 예제 & CS지식으로 끝내기 강의 4주차 (0) | 2023.05.10 |
패스트캠퍼스 JavaScript 코딩테스트 131개 예제 & CS지식으로 끝내기 강의 2주차 (0) | 2023.04.27 |
패스트캠퍼스 JavaScript 코딩테스트 131개 예제 & CS지식으로 끝내기 강의 1주차 (0) | 2023.04.19 |
[Challenge / day-30] 컴포넌트 만들기 - 그룹생성 컴포넌트 (0) | 2023.03.21 |