Skip to content
13 changes: 13 additions & 0 deletions day1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// 연필개수 구하기
// 연필 1 다스는 12자루입니다. 학생 1인당 연필을 1자루씩 나누어 준다고 할 때 N명이 학생수 를 입력하면 필요한 연필의 다스 수를 계산하는 프로그램을 작성하세요.
// - 입력설명
// 첫 번째 줄에 1000 이하의 자연수 N이 입력된다.
// - 출력설명
// 첫 번째 줄에 필요한 다스 수를 출력합니다.
//입력예제 25 출력예제 3

function solution(n) {
let answer;
answer = Math.ceil(n / 12);
return answer;
}
24 changes: 24 additions & 0 deletions day2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// N개의 자연수가 입력되면 각 자연수의 자릿수의 합을 구하고, 그 합이 최대인 자연수를 출력 하는 프로그램을 작성하세요. 자릿수의 합이 같은 경우 원래 숫자가 큰 숫자를 답으로 합니다. 만약 235 와 1234가 동시에 답이 될 수 있다면 1234를 답으로 출력해야 합니다.
// - 입력설명
// 첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다. 각 자연수의 크기는 10,000,000를 넘지 않는다.
// - 출력설명
// 자릿수의 합이 최대인 자연수를 출력한다.
// 입력예제 1

function solution(n, arr) {
let answer,
max = Number.MIN_SAFE_INTEGER;
for (let x of arr) {
let sum = x
.toString()
.split("")
.reduce((a, b) => a + Number(b), 0);
if (sum > max) {
max = sum;
answer = x;
} else if (sum === max) {
if (x > answer) answer = x;
}
}
return answer;
}
21 changes: 21 additions & 0 deletions day3.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// 왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 돌아온 난쟁이가 일곱 명이 아닌 아홉 명이었던 것이다.
// 아홉 명의 난쟁이는 모두 자신이 "백설 공주와 일곱 난쟁이"의 주인공이라고 주장했다. 뛰어난 수학적 직관력을 가지고 있던 백설공주는, 다행스럽게도 일곱 난쟁이의 키의 합이 100이 됨을 기억해 냈다.
// 아홉 난쟁이의 키가 주어졌을 때, 백설공주를 도와 일곱 난쟁이를 찾는 프로그램을 작성하시오.
// - 입력설명
// 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.
// - 출력설명
// 입력된 순서대로 일곱 난쟁이의 키를 출력한다.

function solution(arr) {
let answer = arr;
let sum = answer.reduce((a, b) => a + b, 0);
for (let i = 0; i < 8; i++) {
for (let j = i + 1; j < 9; j++) {
if (sum - (answer[i] + answer[j]) == 100) {
answer.splice(j, 1);
answer.splice(i, 1);
}
}
}
return answer;
}
21 changes: 21 additions & 0 deletions day4.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// 선생님이 N(1<=N<=1000)명의 학생을 일렬로 세웠습니다. 일렬로 서 있는 학생의 키가 앞에 서부터 순서대로 주어질 때, 맨 앞에 서 있는 선생님이 볼 수 있는 학생의 수를 구하는 프로그 램을 작성하세요. (앞에 서 있는 사람들보다 크면 보이고, 작거나 같으면 보이지 않습니다.)
// ▣ 입력설명
// 첫 줄에 정수 N이 입력된다. 그 다음줄에 N명의 학생의 키가 앞에서부터 순서대로 주어진다.
// ▣ 출력설명
// 선생님이 볼 수 있는 최대학생수를 출력한다.
// ▣ 입력예제 1
// 8
// 130 135 148 140 145 150 150 153
// ▣ 출력예제 1 5

function solution(array) {
let answer = 1,
max = array[0];
for (let i = 1; i < array.length; i++) {
if (array[i] > max) {
answer++;
max = array[i];
}
}
return answer;
}
25 changes: 25 additions & 0 deletions day5.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// 7개의 자연수가 주어질 때, 이들 중 홀수인 자연수들을 모두 골라 그 합을 구하고, 고른 홀수들 중 최소값을 찾는 프로그램을 작성하세요.
// 예를 들어, 7개의 자연수 12, 77, 38, 41, 53, 92, 85가 주어지면 이들 중 홀수는 77, 41, 53,85이므로 그 합은77 + 41 + 53 + 85 = 256이 되고,41 < 53 < 77 < 85이므로 홀수들 중 최소값은 41이 된다.
// ▣ 입력설명
// 첫 번째 줄에 자연수 7개가 주어진다. 주어지는 자연수는 100보다 작다. 홀수가 한 개 이상 반드시 존재한다.
// ▣ 출력설명
// 첫째 줄에 홀수들의 합을 출력하고, 둘째 줄에 홀수들 중 최소값을 출력한다.
// ▣ 입력예제 1
// 12 77 38 41 53 92 85
// ▣ 출력예제 1
// 256 41

function solution(array) {
let answer = [];
let sum = 0,
min = 1000;
for (let x of array) {
if (x % 2 === 1) {
sum += x;
if (x < min) min = x;
}
}
answer.push(sum);
answer.push(min);
return answer;
}
21 changes: 21 additions & 0 deletions week1/ETC/question3.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
//삼각형 판별하기 (인프런)
// 길이가 서로 다른 A, B, C 세 개의 막대 길이가 주어지면 이 세 막대로 삼각형을 만들 수 있 으면 “YES"를 출력하고, 만들 수 없으면 ”NO"를 출력한다.
// ▣ 입력설명
// 첫 번째 줄에 100이하의 서로 다른 A, B, C 막대의 길이가 주어진다.
// ▣ 출력설명
// 첫 번째 줄에 “YES", "NO"를 출력한다.

//풀이 포커스) 짧은 막대 두 개 합이 가장 긴 막대 실이 보다 커야한다.
function solution(a, b, c) {
let answer = "YES",
max;
let sum = a + b + c;

if (a > b) max = a;
else max = b;
if (c > max) max = c;
if (sum - max <= max) {
answer = "NO";
}
return answer;
}
24 changes: 24 additions & 0 deletions week1/question1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// [프로그래머스 level0]
// 머쓱이는 학교에서 키 순으로 줄을 설 때 몇 번째로 서야 하는지 궁금해졌습니다. 머쓱이네 반 친구들의 키가 담긴 정수 배열 array와 머쓱이의 키 height가 매개변수로 주어질 때, 머쓱이보다 키 큰 사람 수를 return 하도록 solution 함수를 완성해보세요.

// 제한사항
// 1 ≤ array의 길이 ≤ 100
// 1 ≤ height ≤ 200
// 1 ≤ array의 원소 ≤ 200

//내가 푼 방법 => 반복문 사용
function solution(array, height) {
let answer = 0;
for (let i = 0; i < array.length; i++) {
if (array[i] > height) {
answer++;
}
}
return answer;
}

//다른 사람 풀이 => filter 사용
function solution(array, height) {
var answer = array.filter((tall) => tall > height);
return answer.length;
}
17 changes: 17 additions & 0 deletions week1/question2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//[프로그래머스 레벨0]
//정수 n이 매개변수로 주어질 때, n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
//제한사항
// 1 ≤ n ≤ 10,000

function solution(n) {
let answer = [];

for (d = 1; d <= n; d++)
if (n % d === 0) {
answer.push(d);
}
return answer;
}

// 약수 = divisor
//n을 d로 나눈게 0이되면 d는 n의 약수가 되기 때문에 반복문 안에 넣어서 d가 0이되는 애들을 구한 다음 배열 안에 넣어주었다.
45 changes: 45 additions & 0 deletions week1/question4.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
//프로그래머스 레벨1

// 한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.

// 한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요.

//제한사항
// 3 ≤ number의 길이 ≤ 13
// -1,000 ≤ number의 각 원소 ≤ 1,000
// 서로 다른 학생의 정수 번호가 같을 수 있습니다.

function solution(number) {
let answer = 0;
for (let i = 0; i < number.length - 2; i++) {
for (let j = i + 1; j < number.length - 1; j++) {
for (let k = j + 1; k < number.length; k++)
if (number[i] + number[j] + number[k] == 0) answer++;
}
}
return answer;
}

// i의 인덱스를 고정하고 j와 k를 각각 다음 인덱스로 만들어 세 개를 더했을 때 0이 나오는 값을 찾게 하였다.

// 다른 사람 풀이 중 탐났던 풀이
function solution(number) {
let result = 0;

const combination = (current, start) => {
if (current.length === 3) {
result += current.reduce((acc, cur) => acc + cur, 0) === 0 ? 1 : 0;
return;
}

for (let i = start; i < number.length; i++) {
combination([...current, number[i]], i + 1);
}
};
combination([], 0);
return result;
}

// 서로 다른 사람 3명을 필요로하므로
// 조합 활용 => 3명이 존재 => 그 합을 구하여 0이면 count++;
// combination 함수 사용
42 changes: 42 additions & 0 deletions week1/question5.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// 프로그래머스 레벨 0

// 머쓱이는 행운의 숫자 7을 가장 좋아합니다. 정수 배열 array가 매개변수로 주어질 때, 7이 총 몇 개 있는지 return 하도록 solution 함수를 완성해보세요.
//제한사항
// 1 ≤ array의 길이 ≤ 100
// 0 ≤ array의 원소 ≤ 100,000

// 처음에 생각한 답
function solution(array) {
let answer = 0;
answer = array.filter((array) => array === 7);
return answer.length;
}

// 문제점 => 7의 자리별로 계산하지 못함, 계산 값 틀림

// 고친 답
function solution(array) {
let answer = 0;
let string = array.toString();

for (i = 0; i < string.length; i++)
if (string[i] === "7") {
answer++;
}
return answer;
}

//풀이)
//배열을 아예 문자열로 바꿔서 자리 값을 계산해주었다. 7일 일치할때마다 반복문(+ if문)에서 answer값을 +1씩 해주었다. => 개수 구하기 완료.

// 다른 사람 풀이 참고

function solution(array) {
return array
.join()
.split("")
.filter((el) => {
return el === "7";
}).length;
}
// filter를 이용하고 싶으면 이렇게 사용해야함!
36 changes: 36 additions & 0 deletions week1/question6.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
//프로그래머스 레벨 0

//문자열 my_str과 n이 매개변수로 주어질 때, my_str을 길이 n씩 잘라서 저장한 배열을 return하도록 solution 함수를 완성해주세요.
// 1 ≤ my_str의 길이 ≤ 100
// 1 ≤ n ≤ my_str의 길이
// my_str은 알파벳 소문자, 대문자, 숫자로 이루어져 있습니다.

//처음 푼 풀이
function solution(my_str, n) {
let answer = [];
for (i = 0; i < my_str.length / n; i++) answer.push(my_str.slice(i, i + n));
return answer;
}

//문제점 : 원하는 값으로 잘리지 않음

// 테스트 1
// 입력값 〉 "abc1Addfggg4556b", 6
// 기댓값 〉 ["abc1Ad", "dfggg4", "556b"]
// 실행 결과 〉 실행한 결괏값 ["abc1Ad","bc1Add","c1Addf"]이 기댓값 ["abc1Ad","dfggg4","556b"]과 다릅니다.
// 테스트 2
// 입력값 〉 "abcdef123", 3
// 기댓값 〉 ["abc", "def", "123"]
// 실행 결과 〉 실행한 결괏값 ["abc","bcd","cde"]이 기댓값 ["abc","def","123"]과 다릅니다.

//옳은 풀이
function solution(my_str, n) {
const answer = [];
for (i = 0; i < my_str.length; i += n) answer.push(my_str.slice(i, i + n));
return answer;
}

// 포인트
// - 한개씩 증가시키는 것이 아닌 n씩 증가시켜야한다 => 왜냐면 n만큼 잘라야하기 때문에
// slice()메소드를 사용하여 i부터 i+n까지 잘라 answer배열에 푸시 해주어야한다.
// 이것을 my_str의 길이 만큼 반복해야한다.
48 changes: 48 additions & 0 deletions week1/question7.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// 머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
// 제한사항
// 1 ≤ babbling의 길이 ≤ 100
// 1 ≤ babbling[i]의 길이 ≤ 15
// babbling의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.
// 즉, 각 문자열의 가능한 모든 부분 문자열 중에서 "aya", "ye", "woo", "ma"가 한 번씩만 등장합니다.
// 문자열은 알파벳 소문자로만 이루어져 있습니다.

function solution(babbling) {
let answer = 0;
for (i = 0; i < babbling.length; i++) {
if (
babbling[i]
.replace("ye", " ")
.replace("aya", " ")
.replace("woo", " ")
.replace("ma", " ")
.trim() == ""
) {
answer++;
}
}
return answer;
}

// 다른 풀이
function solution(babbling) {
var answer = 0;
babbling.forEach((element) => {
if (element.split(/aya|ye|woo|ma/g).join("") === "") {
answer++;
}
});
return answer;
}

function solution(babbling) {
var answer = 0;
const regex = /^(aya|ye|woo|ma)+$/;

babbling.forEach((word) => {
if (regex.test(word)) answer++;
});

return answer;
}

// 문자열은 정규식 표현을 사용하는게 깔끔한 것 같다 ! 빨리 정규식 표현에 익숙해져야겠다!