728x90

https://www.acmicpc.net/problem/2751

😢 병합 정렬로 풀어도 해결이 되지 않아 당황했지만, 퀵 정렬(Quick Sort)에 대해 배울 수 있던 문제

😊 O(n log n)를 갖는 퀵 정렬을 이용하면 문제를 해결할 수 있다.
하지만, 아래 소스 1st solution처럼 sort()로도 해결이 가능하다. 하지만, 퀵 정렬보다 시간이 더 걸린다.

퀵 정렬에 대해 참고하기 좋은 포스트 👉 https://coderkoo.tistory.com/7 

퀵 정렬에 대해 참고하기 좋은 유튜브 👉 https://www.youtube.com/watch?v=7BDzle2n47c

728x90
728x90

https://www.acmicpc.net/problem/11651

😢 11650문제를 풀었다면, 보너스 문제

😊 11650문제에서 정렬의 주체만 변경해주면 된다.
y증가를 기준으로 정렬해주는데, y가 같으면 x증가 순으로 정렬해주면 된다.

728x90

https://www.acmicpc.net/problem/11650

😢 시간 초과 때문에 고생한 문제

😊 이 문제 덕분에 sort()의 새로운 방법을 알게 되었다.

시간 초과를 해결하기 위해 가장 중요한 2가지

1. sort() 1번만 사용하기
처음에는 단순하게 x기준 정렬 후 y기준 정렬했기 때문에 sort()가 2번 사용되었다.
하지만, sort( (a, b) => if( a[0] !== b[0] ) { return a[0] - b[0] } return a[1] - b[1] ); 덕분에 sort() 1번만 진행할 수 있었다.

2. console.log() 1번만 사용하기
또한, 시간 초과에서 중요했던 다른 하나console.log()출력을 줄이는 것이었다.
forEach를 이용해, results변수에 모든 출력값을 저장한 후 console.log() 단 한 번 출력해주었더니 시간 초과를 해결할 수 있었다.

728x90

https://www.acmicpc.net/problem/1427

😢 시간 초과 문제가 걸릴 줄 알았지만, 간단했던 문제

😊
1. sort() 내림차순 정렬
2. sort() 오름차순 정렬 + reverse()
3. Selection Sort(선택 정렬)
4. Bubble Sort(버블 정렬)
5. Merge Sort(병합 정렬)

위 5가지 방법으로 모두 풀어보았다.
모두 해결 가능했지만, 당연히 시간 차이가 있다.
버블 > 선택 > 병합 === sort() === sort() + reverse() 순으로 시간이 걸렸다.
(버블이 가장 오래걸렸다는 뜻)

728x90

✨ 반올림이 필요할 때 사용하는 helper method

💻Example Code

 

실행 결과

🧨 반올림이 필요할 경우에 사용할 수 있다.

👉 자세한 내용은 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round

 

Math.round()

The Math.round() function returns the value of a number rounded to the nearest integer.

developer.mozilla.org

 

'JavaScript > Built-in Method etc.' 카테고리의 다른 글

Set (Object)  (0) 2020.02.20
String.prototype.localeCompare()  (0) 2020.02.20
Math.abs()  (0) 2020.01.28
Math.PI  (0) 2020.01.28
Array.prototype.forEach()  (0) 2020.01.23
728x90

https://www.acmicpc.net/problem/2108

😢 알고리즘을 단계별로 풀었다면, 앞의 지식들을 이용해서 풀어주면 쉽게 가능하다.
코드가 조금 긴 것 같아서, Code Refactoring이 가능할지 고민해 봐야겠다.

😊
산술 평균: arr.reduce함수로 값을 더하고, 2로 나눈 후 Math.round()로 반올림 해주면 된다.
중앙 값: 입력받은 값은 sort()해준 후, Math.floor(arr.length / 2) 해준 것을 index로 넣어주면 된다.
최빈 값: 빈도 별로 Map 생성 - arr.push(최빈 값) - 여러개라면 sort 후(Map을 생성하면서 순서가 바뀌기 때문) index 1(2번 째니까)
아니라면 index 0(1개니까)
범위: sort된 입력값의 마지막 인덱스(arr.length-1) - 입력값의 첫 번째 인덱스(0) 해주면 된다.

728x90

Click! 👉 https://dasolpark.github.io/Dasol_React_Current_Weather_With_Open_Weather_Map_API/

 

Current Weather With Open Weather Map API

 

dasolpark.github.io

Github 👉https://github.com/DasolPark/Dasol_React_Current_Weather_With_Open_Weather_Map_API

 

DasolPark/Dasol_React_Current_Weather_With_Open_Weather_Map_API

ReactJS with Open Weather Map API. Contribute to DasolPark/Dasol_React_Current_Weather_With_Open_Weather_Map_API development by creating an account on GitHub.

github.com

Navigator를 이용해 latitude, longitude를 받고,
해당 위치를 기반으로 Open Weather Map API를 이용해 날씨 정보를 받는 간단한 사이드 프로젝트입니다.

봄, 여름, 가을, 겨울 모두 다른 디자인을 적용하였고,
현재위치, 현재 날씨, 체감 온도, 최저 기온, 최고 기온, 현재 습도 정보를 제공합니다.

위치를 제공을 요청하는 페이지
봄 페이지
여름 페이지
가을 페이지
겨울 페이지

728x90

https://www.acmicpc.net/problem/1436

 

😢 666, 1666, ..., 9666의 모습만 보면 안되고, 그 이상의 숫자를 예측해봐야 한다.

😊 다음과 같은 로직으로 문제를 해결했다.
1. 첫 번째 종말의 숫자는 666 이므로 665부터 숫자를 계속 증가시킨다.
2. 만약 증가시킨 숫자에 연속된 666이 포함된다? 그러면 input으로 받은 숫자를 1개만큼 줄인다.
3. input이 0이되면 증가를 중단하고 출력해준다.

 

728x90

https://www.acmicpc.net/problem/1018

Code

최종 제출 코드 1
최종 제출 코드 2

😢 조건문을 이용해 풀려다가 시간을 조금 보낸 문제

😊 일단, 다른 풀이를 참고하여 단순하게 풀어봤다.
맨 왼쪽 위칸이 'W'일 때 또는 'B'일 때, 8*8체스판을 미리 작성해두었다.
그리고 입력받은 체스판 크기만큼 8*8씩 잘라서 반복적으로 비교하여 모든 경우의 수를 저장했다.
최종적으로 Math.min()을 이용해 최솟값을 출력해주었다.

이런 저런 방법으로 다시 풀어봐야겠다.

Full Code (https://github.com/DasolPark/Dasol_JS_Algorithm/tree/master/Baekjoon)

// Re-painting the chess board
 
// 1st Solution
 
// For submit
 
// const fs = require('fs');
// const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
 
// For local test
// const input = [
// '8 8',
// 'WBWBWBWB',
// 'BWBWBWBW',
// 'WBWBWBWB',
// 'BWBBBWBW',
// 'WBWBWBWB',
// 'BWBWBWBW',
// 'WBWBWBWB',
// 'BWBWBWBW'
// ];
 
const input = [
'10 13',
'BBBBBBBBWBWBW',
'BBBBBBBBBWBWB',
'BBBBBBBBWBWBW',
'BBBBBBBBBWBWB',
'BBBBBBBBWBWBW',
'BBBBBBBBBWBWB',
'BBBBBBBBWBWBW',
'BBBBBBBBBWBWB',
'WWWWWWWWWWBWB',
'WWWWWWWWWWBWB'
];
 
const NM = input
.shift()
.split(' ')
.map(num => parseInt(num));
const N = NM.shift();
const M = NM.shift();
const minArr = [];
 
const whiteFirst = [
'WBWBWBWB',
'BWBWBWBW',
'WBWBWBWB',
'BWBWBWBW',
'WBWBWBWB',
'BWBWBWBW',
'WBWBWBWB',
'BWBWBWBW'
];
 
const blackFirst = [
'BWBWBWBW',
'WBWBWBWB',
'BWBWBWBW',
'WBWBWBWB',
'BWBWBWBW',
'WBWBWBWB',
'BWBWBWBW',
'WBWBWBWB'
];
 
function whiteFirstPaint(y, x) {
let counter = 0;
 
for (let i = y; i < y + 8; i++)
for (let j = x; j < x + 8; j++)
if (input[i][j] !== whiteFirst[i - y][j - x]) counter++;
 
return counter;
}
 
function blackFirstPaint(y, x) {
let counter = 0;
 
for (let i = y; i < y + 8; i++)
for (let j = x; j < x + 8; j++)
if (input[i][j] !== blackFirst[i - y][j - x]) counter++;
 
return counter;
}
 
for (let i = 0; i + 7 < N; i++) {
for (let j = 0; j + 7 < M; j++) {
minArr.push(whiteFirstPaint(i, j));
minArr.push(blackFirstPaint(i, j));
}
}
 
console.log(Math.min.apply(null, minArr));

+ Recent posts