1부터 20 미만의 정수 중에서 2 또는 3의 배수가 아닌 수의 총합을 구하시오.
let sum = 0;
for (let i = 1; i < 30; i++) {
sum += i % 2 ? (i % 3 ? i : 0) : 0;
}
console.log(sum);
1부터 20 미만의 정수 중에서 2 또는 3의 배수인 수의 총합을 구하시오.
let sum = 0;
for (let i = 1; i < 20; i++) {
sum += i % 2 ? (i % 3 ? 0 : i) : i;
}
console.log(sum);
두 개의 주사위를 던졌을 때, 눈의 합이 6이 되는 모든 경우의 수를 출력하시오.
for (let i = 1; i < 7; i++) {
for (let j = 1; j < 7; j++) {
if (i + j === 6) console.log([i, j]);
}
}
삼각형 출력하기 - pattern 1
const addstr = "*";
for (let i = 0; i < 5; i++) {
for (let j = 0; j < i + 1; j++) str += addstr;
str += "\n";
}
console.log(str);
**
*
version 1
let str = "// 12. 삼각형 출력하기 - pattern 2 v1 \n";
let addstr = "";
for (let i = 0; i < 5; i++) {
addstr += i ? " " : "";
str += addstr;
for (let j = i; j < 5; j++) str += "*";
str += "\n";
}
console.log(str);
version 2
let str = "// 12. 삼각형 출력하기 - pattern 2 v2 \n";
for (let i = 0; i < 5; i++) {
for (let j = i; j > 0; j--) str += " ";
for (let j = i; j < 5; j++) str += "*";
str += "\n";
}
console.log(str);
**
let str = "// 14. 삼각형 출력하기 - pattern 4 \n";
let addstr = "";
for (let i = 5; i > 0; i--) {
for (let j = i - 1; j > 0; j--) str += " ";
addstr += "*";
str = str + addstr + "\n";
}
console.log(str);
*
let str = "// 15. 정삼각형 출력하기 \n";
let addstr = "*";
for (let i = 0; i < 5; i++) {
for (let j = 4 - i; j > 0; j--) str += " ";
addstr += i ? "**" : "";
str = str + addstr + "\n";
}
console.log(str);
삼각형 판별하기
세 인자 값으로 삼각형을 만들 수 있는 지 판별하기
삼각형이 되는 조건 : 가장 큰 값 < 나머 주 값의 합
function solution(a, b, c) {
// 나의 풀이
let answer, max;
const total = a + b + c;
if (a > b) max = a;
else max = b;
if (c > max) max = c;
if (max < total - max) answer = "YES";
else answer = "NO";
// 선생님 풀이
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;
}
console.log(solution(6, 7, 11));
console.log(solution(13, 33, 17));
연필 갯수
function solution(n) {
let answer;
answer = Math.ceil(n / 12);
return answer;
}
console.log(solution(25));
console.log(solution(178));
1부터 N까지 합 출력하기
인자값을 받으면 1부터 그 값까지의 합을 출력하기
for loop를 활용하기
function solution(n) {
//나의 풀이
let answer = (n * (n + 1)) / 2;
//선생님 풀이
let answer = 0;
for(let i =1; i <=n; i++){
answer += 1;
}
return answer;
}
console.log(solution(10));
console.log(solution(6));
5. 최솟값 구하기
여러 숫자들 중 최솟값을 리턴하기
function solution(arr) {
//나의 풀이
let answer = Math.min(...arr);
//선생님 풀이
let answer,
min = Number.MAX_SAFE_INTEGER; //arr[0]
for (let i = 0; i < arr.length; i++) {
if (arr[i] < min) min = arr[i];
}
answer = min;
return answer;
}
console.log(solution([5, 3, 7, 11, 2, 15, 17]));
추가! ) let answer = Math.min.apply(null, arr); null 꼭 적어줘야함. this 에다가 control 할 수 있는 객체를 넘겨줌
Number.MAX_SAFE_INTEGER = 안전한 상수의 최댓값을 제공한다. 최솟값으로 이를 설정함으로써 이 값보다는 무조건 배열내의 숫자들의 값이 적기에 활용할 수 있다.
6. 홀수
배열 내의 숫자들 중 홀수값들만의 합과 홀수값들 중 최솟값을 구하라
function solution(arr) {
//나의 풀이
let answer = [];
let odds = arr.filter((num) => num % 2 === 1);
let sumOdds = odds.reduce((acc, cur) => (acc += cur), 0);
let minOdd = Math.min(...odds);
answer.push(sumOdds, minOdd);
//선생님 풀이
let answer = [];
let sum = 0,
min = Number.MAX_SAFE_INTEGER;
for (let x of arr) {
if (x % 2 === 1) {
sum += x;
if (x < min) min = x;
}
}
answer.push(sum);
answer.push(min);
return answer;
}
arr = [12, 77, 38, 41, 53, 92, 85];
console.log(solution(arr));
7. 10부제
배열 숫자내의 일의 자리 수와 인자 첫번째 값과 일치하는 숫자들의 갯수를 구하라
function solution(day, arr) {
// 나의 풀이
let answer = arr.filter((num) => num % 10 === day).length;
// 선생님 풀이
let answer = 0;
for (let x of arr) {
if (x % 10 === day) answer++;
}
return answer;
}
arr = [25, 23, 11, 47, 53, 17, 33];
console.log(solution(3, arr));
console.log(solution(0, [12, 20, 54, 30, 87, 91, 30]));
8. 일곱난장이
9개의 숫자들 중 7개의 합이 100이어야 한다. 100이 되지 못하는 두 숫자를 제외한 배열을 return 하라
function solution(arr) {
// 나의 풀이
let answer = [];
let gap = arr.reduce((acc, cur) => (acc += cur), 0) - 100;
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
if (arr[i] + arr[j] === gap && i > j) {
answer.push(arr[i], arr[j]);
}
}
}
// 선생님 풀이
let answer = arr;
let sum = arr.reduce((a, b) => a + b, 0);
for (let i = 0; i < 8; i++) {
for (let j = i + 1; j < 9; j++) {
if (sum - (arr[i] + arr[j]) === 100) {
arr.splice(j, 1);
arr.splice(i, 1);
}
}
}
return answer;
}
let arr = [20, 7, 23, 19, 10, 15, 25, 8, 13];
console.log(solution(arr));
유의 사항) 만약 i부터 splice를 해버리면 index가 앞으로 당겨져서 25가 아닌 그 뒤 8이 지워져버린다.
그렇기에 더 뒤 index인 j 부터 splice 해주어야 한다.
splice는 두번째 인자값으로 삭제하고 싶은 item의 갯수를 받는다. 적어주지 않으면 첫번째 인자값부터 다 삭제되니 유의할 것!
A를 #로
문자 'A'를 '#'로 바꾸어서 다시 return 한다.
function solution(str) {
//나의 풀이
let answer = str.replaceAll("A", "#");
//선생님 풀이
let answer ='';
for(let x of str){
if(x === 'A')answer +='#';
else answer +=x;
}
//또다른 풀이
let answer = str;
answer = answer.replace(/A/g, '#');
return answer;
}
console.log(solution("BANANA"));
참고로 str을 answer 에 할당해서 str 값을 수정한다해도 자동적으로 answer 값이 바뀌지는 않음. answer에서 직접 바꾸어주어야함. 문자열에서는 배열이나 객체와 같은 얕은 복사가 되지 않는다.
문자 찾기
문장과 문자를 인자로 받는 함수에서 해당 문자의 갯수를 return한다.
function solution(s, t) {
let answer = 0;
// 나의 풀이
Array.from(s).forEach((letter) => {
if (letter === t) {
answer++;
}
});
// 선생님 풀이
for(let x of s){
if(x===t)answer++;
}
// 또다른 풀이 - 이풀이 좋은듯
let answer = s.split(t).length -1 ;
return answer;
}
console.log(solution("COMPUTERPROGRAMMING", "R"));
split method는 지정한 구분자를 이용하여 여러 개의 문자열로 나눈다.
대문자 찾기
function solution(s) {
let answer = 0;
for (let x of s) {
let num = x.charCodeAt();
// 각 문자의 아스키넘버 대문자 : 65 ~ 90 알아둘 것! 소문자 : 97 ~ 122;
if (num >= 65 && num <= 90) answer++;
// if(x===x.toUpperCase())answer++;
}
return answer;
}
⭐️ 아스키코드란?
컴퓨터는 0과 1 숫자 밖에 모르기 때문에 문자도 숫자로 기억한다.
이때, 어떤 숫자와 어떤 문자를 대응시키는가에 따라 여러 가지 인코딩 방식이 있는데 통상 아스키 코드 방식을 많이 사용한다.
아스키 코드(ASCII Table)는 0번부터 127번까지만 사용한다.
⭐️ 참고로 알아두기 <string.charCodeAt()>
아스키 코드 대문자 : 65 ~ 90 반환
아스키 코드 소문자 : 97 ~ 112 반환
-> 대문자와 소문자 값 차이는 32이다.
대문자로 통일
문자열을 받아 소문자인 문자들을 대문자로 전환하여 리턴한다.
function solution(s) {
// 나의 풀이
// let answer;
// answer = Array.from(s)
// .map((letter) => letter.toUpperCase())
// .join("");
// 선생님 풀이
let answer = "";
for (let x of s) {
let num = x.charCodeAt();
// 아스키코드를 활용한 방법
if (num >= 97 && num <= 122) answer += String.fromCharCode(num - 32);
else answer += x;
// toLowerCase()를 활용한 방법
// if (x === x.toLowerCase()) answer += x.toUpperCase();
// else answer += x;
}
// 더 간단한 풀이
let answer = s.toUpperCase();
return answer;
}
console.log(solution("ItisTimeToStudy"));
대소문자 변화
function solution(s) {
// 나의 풀이
let answer = "";
for (let x of s) {
// if (x === x.toLowerCase()) answer += x.toUpperCase();
// else answer += x.toLowerCase();
// 아스키코드 활용 방식
let num = x.charCodeAt();
if (num >= 97 && num <= 122) answer += String.fromCharCode(num - 32);
else answer += String.fromCharCode(num + 32);
}
return answer;
}
console.log(solution("StuDY"));
String.fromCharCode() : 아스키코드를 인자로 받아 문자열로 반환한다.
가장 긴 문자열
문자열의 배열을 인자로 받아 가장 긴 문자열을 리턴하는 함수
function solution(n, arr) {
// 나의 풀이
let answer = "";
let max = 0;
for (let x of arr) {
if (x.length > max) {
max = x.length;
answer = x;
}
}
// 선생님 풀이
let answer,
max = Number.MIN_SAFE_INTEGER;
for (let x of s) {
if (x.length > max) {
max = x.length;
answer = x;
}
}
return answer;
}
console.log(
solution(5, ["teacher", "time", "student", "beautiful", "good"])
);
가운데 문자 출력
문자열의 중앙 문자를 리턴한다. 짝수일 경우 가운데 두 문자를 리턴한다.
function solution(s) {
// 나의 풀이
// let answer;
// let index = Math.floor(s.length / 2);
// answer = s.length % 2 === 0 ? s[index - 1] + s[index] : s[index];
// 선생님 풀이
let answer;
let mid = Math.floor(s.length / 2);
if (s.length % 2 === 1) answer = s.substring(mid, mid + 1);
else answer = s.substring(mid - 1, mid + 1);
return answer;
}
console.log(solution("study"));
console.log(solution("good"));
⭐️ 새로 배운 것 : string.substring(indexStart, indexEnd)
-> string객체의 시작 인덱스부터 종료 인덱스 전까지 문자열의 부분 문자열을 반환한다.
-> indexEnd : 옵션, 반환문자열 마지막 인덱스 (포함하지 않음)
⭐️ str.substr(indexStart, length)
-> length : 총 몇개의 문자를 뽑아낼 것인지 지정한다.
ex) s.sub(mid,1)
중복문자 제거 indexOf
문자열을 인자로 받아 중복된 단어들을 없앤 새로운 문자열을 return한다.
function solution(s) {
// 나의 풀이
// let answer = "";
// for (let x of s) {
// if (!answer.includes(x)) answer += x;
// }
//나의 풀이 2
let answer = Array.from(new Set(str)).join("");
//나의 풀이 3
//let answer = '';
// for (let x of str) {
// if (answer.indexOf(x) === -1) answer += x;
// }
// 선생님 풀이
let answer = "";
for (let i = 0; i < s.length; i++) {
if (s.indexOf(s[i]) === i) answer += s[i];
}
return answer;}
console.log(solution("ksekkset"));
⭐️ 참고) indexOf('x',1 ) 두번째 인자의 의미
-> 해당 지수부터 찾아낸다. 즉 0번은 건너뛰고 지수 1번부터 x 에 해당하는 item을 찾아낸다는 의미이다.
중복단어 제거
문자열들의 배열을 인자로 받아 중복된 값을 제거한 새로운 배열을 return한다. (filter와 indexOf의 활용)
function solution(arr) {
// 나의 풀이
// let answer = [];
// arr.forEach((str) => {
// if (!answer.includes(str)) answer.push(str);
// });
// indexOf 이용해보기
// let answer = [];
// for (let i = 0; i < arr.length; i++) {
// if (i === arr.indexOf(arr[i])) answer.push(arr[i]);
// }
// filter 이용해보기
let answer = arr.filter((str, i) => arr.indexOf(str) === i);
return answer;
}
console.log(solution(["good", "time", "good", "time", "student"]));