Skip to content

Commit c5f836f

Browse files
authored
Merge pull request #34 from jaewon1676/main
2022.04.18(월) jaewon1676 7문제의 풀이 추가
2 parents 10bba3e + 8ee3128 commit c5f836f

File tree

8 files changed

+199
-47
lines changed

8 files changed

+199
-47
lines changed

README.md

Lines changed: 45 additions & 43 deletions
Large diffs are not rendered by default.

level-1/소수-만들기.js

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,32 @@ function isPrime(num) {
2121
if (num % i === 0) return false
2222
}
2323
return true
24-
}
24+
}
25+
26+
//정답 2 - jaewon1676
27+
// https://programmers.co.kr/learn/courses/30/lessons/12977?language=javascript
28+
29+
function solution(nums) {
30+
let len = nums.length, answer = 0;
31+
32+
for (let i = 0; i < len - 2; i++) {
33+
for (let j = i + 1; j < len - 1; j++) {
34+
for (let k = j + 1; k < len; k++) {
35+
if (isPrime(nums[i] + nums[j] + nums[k])) {
36+
answer++;
37+
}
38+
}
39+
}
40+
}
41+
return answer;
42+
}
43+
44+
const isPrime = (n) => {
45+
for (let i = 2; i <= Math.sqrt(n); i++) { //n의 제곱근까지 순회
46+
if (n % i === 0) { // 나머지가 0이 나오면 소수가 아니다.
47+
return false;
48+
}
49+
}
50+
return true;
51+
}
52+
// 세개의 수를 더해야 하기때문에 수 for문 하나당 수 하나를 넣어서 순회하였다.

level-1/체육복.js

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,29 @@ function solution(n, lost, reserve) {
6060
}
6161
// 체육복 1개 이상을 가진 학생들의 수 반환
6262
return students.filter((v => v >= 1)).length;
63-
}
63+
}
64+
65+
//정답 3 - jaewon1676
66+
function solution(n, lost, reserve) {
67+
let answer = Array(n).fill(1) // n만큼의 배열을 만들어서 1을 만들어줍니다
68+
let cnt = 0;
69+
for(let i = 0; i < reserve.length; i++){ // reserve 를 순회하며 체육복
70+
answer[reserve[i]-1] += 1
71+
}
72+
for(let i = 0; i < lost.length; i++){ // lost 를 순회하며 체육복 수를 -1
73+
answer[lost[i]-1] -= 1
74+
}
75+
for(let i = 0; i < n; i++){ // n을 순회하며 앞사람과 뒷사람의 체육복 수를 비교한다.
76+
if (answer[i] == 2 && answer[i+1] == 0 || answer[i+1] == 2 && answer[i] == 0){
77+
answer[i] = 1
78+
answer[i+1] = 1
79+
}
80+
}
81+
for(let i = 0; i < answer.length; i++){
82+
(answer[i] >= 1 ? cnt += 1 : null)
83+
}
84+
return cnt
85+
}
86+
//그리디
87+
// lost 배열과 reserve 배열을 순회하여 체육복을 추가, 제거 해줍니다.
88+
// 그 후에 최종적으로 i부터 n까지 for문을 순회하며 i번쨰 학생과 i+1번째의 학생이 가진 체육복 수를 비교하여 빌려 줄 수 있는지, 빌려줄 수 없는지 확인 합니다.

level-2/JadenCase-문자열-만들기.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,19 @@ function solution(s) {
66
answer = s.split(' ').map(word => word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()).join(' ')
77
//word[0]은 빈 문자열을 만나면 undefined를, word.charAt(0)은 빈 문자열을 만나면 빈 문자열을 반환한다.
88
return answer;
9-
}
9+
}
10+
11+
//정답 2 - jaewon1676
12+
function solution(s) {
13+
s = s.split(' ').map(el => el.split('').map((el, index) =>
14+
index == 0 ? el.toUpperCase() : el.toLowerCase()).join('')).join(' ')
15+
return s;
16+
}
17+
// 문자열을 연습하기에 좋은 문제입니다.
18+
19+
// s.split(' ') // 띄어쓰기를 기준으로 나눕니다.
20+
// .map(el => el.split('')) 나눈 덩어리를 다시 요소 하나 하나씩 나눠줍니다
21+
// .map((el, index) => index == 0 ? el.toUpperCase() : el.toLowerCase())
22+
// 덩어리의 요소가 첫번째이면 대문자, 그렇지 않으면 소문자로 변환 해줍니다.
23+
// .join('') 작은 배열들을 합쳐줍니다.
24+
// .join(' ') 큰 배열들을 합쳐줍니다.

level-2/n^2-배열-자르기.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//https://github.com/codeisneverodd/programmers-coding-test
2+
//완벽한 정답이 아닙니다.
3+
//정답 1 - jaewon1676
4+
function solution (n, left, right) {
5+
const answer = [];
6+
7+
for (let i=left; i <= right; i++) { // left부터 right까지를 구한다.
8+
let row = parseInt(i/n);// 행(row)을 구한다.
9+
let column = i%n;// 열(column)을 구한다.
10+
answer.push(Math.max(row, column) + 1) // 행과 열중 큰 값을 푸시한다.
11+
}
12+
return answer
13+
}

level-2/최댓값과-최솟값.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,13 @@ function solution(s) {
1414
const arr = s.split(' ').map(x => parseInt(x, 10)).sort((a, b) => a - b)
1515
answer = arr[0] + ' ' + arr[arr.length - 1]
1616
return answer;
17+
}
18+
19+
//정답 3 - jaewon1676
20+
function solution(s) {
21+
s = s.split(' ')
22+
s.sort((a, b) => {return a - b}) // 오름차순 정렬
23+
let small = s[0] // s의 최솟값
24+
let large = s[s.length - 1] // s의 최댓값
25+
return (small + ' ' + large)
1726
}

level-2/카펫.js

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,30 @@ function widthHeightPair(size) {
1212
let result = []
1313
for (let i = 1; i <= Math.sqrt(size); i++) if (size % i === 0) result.push([size / i, i])
1414
return result
15-
}
15+
}
16+
17+
//정답 2 - jaewon1676
18+
function solution(brown, yellow) {
19+
var answer = [];
20+
let sum = brown + yellow;
21+
22+
//카펫의 최소높이는 3부터이다.(테두리 갈색, 가운데 노란색)
23+
for(let height=3; height<brown/2; height++){
24+
//전체 크기에서 높이로 나눌때 나머지가 없을경우만 진행
25+
if(sum % height === 0){
26+
//가로길이
27+
let weight = sum / height;
28+
//테두리를 제외한 길이를 구해야하기 때문에 각각 -2해준뒤 곱셈 하여 답을 구한다.
29+
if( (height-2) * (weight-2) === yellow){
30+
return [weight, height];
31+
}
32+
}
33+
}
34+
return answer;
35+
}
36+
// 완전탐색
37+
38+
// 문제 설명에서의 중앙은 노란색, 테두리는 갈색이 포인트입니다.
39+
// 갈색은 항상 노란색의 가로 세로 크기보다 +2 만큼 큽니다.
40+
// 따라서 높이는 전체 테두리/2보다 작으므로
41+
// 3부터 brown/2 를 순회합니다.

level-3/단속카메라.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
//https://github.com/codeisneverodd/programmers-coding-test
2+
//완벽한 정답이 아닙니다.
3+
//정답 1 - jaewon1676
4+
function solution(routes) {
5+
let cctv = 1; // cctv의 개수는 최소 1개
6+
routes.sort((a, b) => a[0] - b[0]); // 고속도로 진입 시점을 기준으로 오름차순 정렬
7+
// [ [ -20, -15 ], [ -18, -13 ], [ -14, -5 ], [ -5, -3 ] ]
8+
let out = routes[0][1]; // -15
9+
// 나간 시점(out)은 첫 차량의 나간시점으로 초기화
10+
11+
for(let i = 1; i < routes.length; i++) {
12+
// 나간 시점(out)보다 현재 차량의 진입이 느리다면 카메라 추가 설치
13+
if(out < routes[i][0]) {
14+
cctv++;
15+
out = routes[i][1]; // out 시점 업데이트
16+
}
17+
18+
// 나간 시점(out)이 현재 차량의 진출시점보다 큰 경우
19+
if(out > routes[i][1]) {
20+
out = routes[i][1]; // out 시점 업데이트
21+
}
22+
}
23+
24+
return cctv;
25+
}
26+
// 그리디
27+
28+
// 우리는 카메라를 최소로 설치 해야합니다. 그러기 위해서는 고속도로 진입 시점을 기준으로 오름차순 정렬을(빨리 진입한 순) 합니다.
29+
// 이렇게 되면 배열에 있는 모든 고속도로 진입 시점은 배열의 첫번째 고속도로 진입 시점보다 더 뒤에 있습니다. 그러므로 우리는
30+
// 나간시점만 검사 해주면 됩니다.
31+
32+
// 먼저 첫번째 routes의 고속도로를 빠져나간 시점을 out 변수에 담아줍니다.
33+
// 이 out 변수를 두번째 routes의 고속도로를 빠져나간 시점과 비교하여 out 변수보다 route[i][1]가 크면 ( 나간 시간이 느리면)
34+
// cctv를 하나 늘려줍니다. , out 변수를 갱신 하며 세번째, 네번째도 계속 비교해줍니다.

0 commit comments

Comments
 (0)