라벨이 NodeJS인 게시물 표시

[Hackerrank] Breaking the Records 문제 해설 - Algorithms > Implementation / Easy

이미지
Breaking the Records 1. 문제 설명 이 문제는 교내 농구 선수인 Maria의 시즌 성적을 구하는 문제이다. 한 시즌에서 n번 경기를 치루는 동안 각각의 점수를 s배열에 표기한다(s[0], s[1], ..., [sn-1]). 구하고자 하는 결과물은 다음과 같다. 한 경기에서 기록한 최고 점수가 업데이트 된 횟수 한 경기에서 기록한 최저 점수가 업데이트 된 횟수 예를 들면 다음과 같이 한 시즌 경기를 치뤘을 경우,  Maria의 한 시즌 성적 최고 점수는 10 -> 20 -> 25로 총 2번 업데이트 됐다(10점은 초기값). 그리고 최저 점수는 10 -> 5 -> 4 -> 2 -> 1로 총 4번 업데이트 됐다(10은 초기값). *원본 링크:  https://www.hackerrank.com/challenges/breaking-best-and-worst-records/problem 2. Input Format 첫번째 줄에는 한 시즌에 치뤄진 경기 수(n)가 주어진다. 부전째 줄에는 Maria가 각 경기에서 기록한 점수(s)가 주어진다. 3. Output Format 최고 점수와 최저 점수가 업데이트 된 횟수를 각각 출력한다. Sample Input 1 9 10 5 20 20 4 5 2 25 1 Sample Output 1 2 4 Sample Input2 10 3 4 21 36 10 28 35 5 24 42 Sample Output2 4 0 Solution 이 문제는 반복문을 통해 해결 할 수 있다. 초기 최고점과 최저점을 시즌 첫번째 경기의 점수로 설정한다. 경기 횟수만큼 반복문을 실행한다. 반복문 안에서 현재 최고점보다 더 높은 점수가 발생하면 increase가 발생했다고 생각하고 최고점 카운트를 1 증가시킨다. 3번과 동일한 형태로 현재 최저점보다 더 낮은 점수가 발생하면 decrease가 발생했다고 생각하고 최저점 카운트를 1 증가시킨다. 최종 코드는 ...

[Hackerrank] Kangaroo 문제 해설 - Algorithms > Implementation / Easy

이미지
Kangaroo 1. 문제 설명 이 문제는 서로 다른 시작 지점과 점프 크기를 가진 두 마리의 캥거루가 경주를 할 때, 뒤에서 출발한 캥거루와 앞선 지점에서 출발한 캥거루가 똑같은 시점에 같은 지점에 있을 수 있는지 묻는 문제이다(마치 어렸을 적 수학 책에서 나왔던 문제와 비슷하다..). * 원본 링크 :  https://www.hackerrank.com/challenges/kangaroo/problem 변수 설명 x1 : 첫번째 캥거루의 시작 지점 x2 : 두번째 캥거루의 시작 지점 v1 : 첫번째 캥거루가 한 번에 점프 할 수 있는 거리 v2 : 두번째 캥거루가 한 번에 점프 할 수 있는 거리 2. Input Format 첫번째 줄에 x1, v1, x2, v2의 값이 주어진다. 3. Output Format 두 캥거루가 똑같은 지점에 똑같은 타이밍에 존재 할 수 있다면 YES 출력, 그렇지 않다면 NO 출력 4. 제약 조건 Sample Input1 0 3 4 2 Sample Output1 YES Sample Input2 0 2 5 3 Sample Output 2 NO Solution 이 문제를 처음 접하고 떠올린 풀이 방법은 다음과 같다. x1 < x2 이므로, v1 < v2 면 두 캥거루는 만날 수 없으므로 NO 출력 1 <= v1, v2 <= 10000 이므로 10000번 반복문을 수행하면서 두 캥거루가 같아지는 지점이 존재하면 YES 출력, 아니면 NO 출력 1번은 괜찮지만, 2번의 경우 시간 복잡도가 최대 O(10000)까지 올라갈 수 있는 무적이나 비효율적인 알고리즘이 탄생할 것 같았다. 그래서 조금 더 생각해보니 아래와 같은 식이 도출 되었다. 두 캥거루가 동일한 지점에서 만나려면 아래 식이 성립해야 한다. x1 + n * v1 = x2 + n ...

[Hackerrank] Apple and Orange 문제 해설 - Algorithms > Implementation / Easy

이미지
Apple and Orange 1. 문제 설명 이 문제는 사과 나무와 오랜지 나무 사이에 있는 Sam의 집에 사과와 오랜지 열매가 얼마나 많이 떨어졌는지 구하는 알고리즘 문제다. 자세한 내용은 아래 링크에서 확인 할 수 있다. * 원본 링크 :  https://www.hackerrank.com/challenges/apple-and-orange/problem 문제 이해를 위한 이미지 위의 이미지에서 볼 수 있듯이 모든 사물은 x-축 상에 있다고 가정한다. 주어지는 변수를 설명하면 다음과 같다. s: Sam의 집이 시작되는 지점 t: Sam의 집이 끝나는 지점 a: 사과 나무의 위치 b: 오랜지 나무의 위치 m: 사과의 갯수 n: 오랜지의 갯수 d: 각각의 열매(사과, 오랜지)가 해당 과일 나무와 떨어져있는 거리. 값이 음수(-)일 경우 x-축의 좌측에, 양수(+)일 경우 우측에 존재한다는 의미이다. 2. Input Format 첫번째 줄에는 s와 t값이 구분되어 주어진다. 두번째 줄에는 a와 b값이 구분되어 주어진다. 세번째 줄에는 m과 n값이 주어진다. 네번쨰 줄에는 m개의 사과가 떨어진 지점과 a지점까지의 거리를 표시한다. 다섯번쨰 줄에는 n개의 오랜지가 떨어진 지점과 b지점까지의 거리를 표시한다. 3. Output Format 첫번째 줄에는 Sam의 집에 떨어진 사과의 갯수를 표시한다. 두번째 줄에는 Sam의 집에 떨어진 오랜지의 갯수를 표시한다. 4. 제약조건 Sample Input 7 11 5 15 3 2 -2 2 1 5 -6 Sample Output 1 1 Solution 처음 이 문제를 접했을 때 내가 생각한 해결 방법은 너무 단순했다. a < s < t < b 이므로,  떨어진 각 사과( apple[i] )의 좌표와 사과 나무의 위치를 더한 값이 s보...

[Hackerrank] Grading Students 문제 해설 - Algorithms > Implementation / Easy

Grading Students 1. 문제 설명 이번 문제는  HackerLand University의 성적 판별 기준을 제시하고 입력된 학생들의 최종 grade 를 산출하는 문제다. * 원본 링크 :  https://www.hackerrank.com/challenges/grading/problem HackerLand University의 기준은 다음과 같다. 모든 학생은 0 ~ 100점 사이의 grade 를 부여 받는다. 40점보다 낮은 점수는 fail 처리 한다. 교수인 Sam의 기준은 다음과 같다. 해당 학생의 grade 와 다음 5의 배수인 값의 차가 3점 이하면 해당 grade 를 해당 값으로 올려준다. 점수가 38점보다 낮을 경우 반올림 하지 않는다. 예를 들어, grade = 84 라면 점수를 상향 조정 해 최종 결과는 85가 된다.  하지만 grade = 29 라면 40점보다 낮은 점수이므로 반올림 하지 않으며, 최종 결과는 29가 된다. 2. Input Format 첫번째 줄에는 Sam의 수업에 참여하는 학생의 수( n )가 주어진다. 이후 i번째 줄에는 각 학생의 점수가 주어진다. 3. Output Format i번째 줄에 반올림 처리가 된  grade i 가 표시된다. Sample Input 4 73 67 38 33 Sample Output 75 67 40 33 Solution 이 문제의 제약 사항은 2가지다.  다음 5의 배수인 값과의 차이가 3보다 작을 경우 해당 값으로 반올림 해준다. 40점 미만인 학생은 반올림 하지 않고 기존 점수를 유지한다. 일단, 반올림 최소 점수인 38점을 기준으로 한 번 점수를 검증한다. 이후에 5의 배수 값으로 반올림 할 것인지 판단하다. 이 때 판단 기준은 5 - (점수 % 5) < 3 이 된다. 학생의 점수를 5로 나누면 5다음 5의 배수와의 차이를 알 수 있다. ex1. grade = 37 5 - (37...

[Javascript, ECMAScript] float(실수) 연산 오류 원인과 해결 방법

Javascript에서 float(실수) 연산을 수행하다 보면 원치않는 결과가 발생하는 경우가 있다. 예를 들어 아래와 같은 연산을 수행하는 경우 0.3이라는 결과를 기대하지만, 실제로는 0.30000000000000004라는 값이 표시된다. console.log(0.1 + 0.2); //0.30000000000000004 이러한 오류가 발생하는 이유는 Javascript(ECMAScript)가 IEEE-754 를 표준으로 사용하고 있기 때문이다. IEEE-754는 컴퓨터에서 부동소수점을 표시하는 방법을 정하는 표준이다. 사실 위와같은 결과가 나오는 것은 표준을 따르고 있는 것이기 때문에 정상 작동하고 있는 것이지만... 우리가 원하는 결과는 0.3이므로 수정이 필요하다. 아래와 같이 parseFloat() 와 toFixed() 메서드를 이용해 해결 할 수 있다. console.log(0.1 + 0.2); //0.30000000000000004 const num1 = parseFloat(0.1); const num2 = parseFloat(0.2); console.log((num1 + num2).toFixed(2)); //0.3 toFixed() 메서드의 인자값은 소수 몇째 자리까지 표시할 것인지를 지정한다.