Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit c5f836f

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /