세 수 중 최솟값
function minOfThree(a, b, c) {
let answer = a;
if (a > b) {
answer = b
}
if ( answer > c) {
answer = c
}
return answer
}
삼각형이 만들어질까?
function makeTrianglePossible(a, b, c) {
let total = a + b + c;
let max = a;
if (b > a) max = b;
if (c > max) max = c;
if ((total - max) > max) return true
else return false
}
필요한 연필은 몇 dozen?
function howManyDozen(n) {
let answer = Math.ceil(n / 12)
return answer
}
//Math.ceil()은 올림 메서드
1부터 n까지의 합
function sum(n) {
let answer=0;
for(let i=1; i<=n; i++) {
answer += i
}
return answer;
}
숫자로 구성된 배열에서 최솟값
function minOfArr(arr) {
let min = arr[0];
for(let i = 0; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i]
}
}
return min
}
//min값을 구해야 할 때 초기값을 큰 값으로 설정하는게 도움이 될 수 있다.
let min = Number.MAX_SAFE_INTEGER;
내장함수로 최솟값, 최댓값을 구한다?
Math.min(2, 3, 4, 7)
Math.min([2, 3, 4])
: ()에 배열을 바로 담으면 값을 구할 수 없다.
: spread 연산자를 사용하자
Math.min(...arr)
Math.max(...arr)
: spread 연산자를 사용하지 않으려면? apply를 사용하자
: 첫 번째 인자에는 객체를 넘겨야 한다
: 두 번째 인자에 배열을 넘긴다
Math.max.apply(null, arr)
홀수 중 최솟값
function minOfOdd(arr) {
let answer = arr.filter(i => i % 2 === 1);
return Math.min(...arr)
}
1의 자리 수가 같은 요소는 몇 개?
function sameUnits(arr, num) {
let answer = 0;
for( let i=0; i<arr.length; i++) {
if(arr[i] % 10 === num) {
answer += 1;
}
}
return answer;
}
배열의 요소 중 합쳐서 100이 되는 요소만 반환
function sumIsHundred(arr) {
let answer = arr;
let sum = answer.reduce((a, b)=> a+b, 0);
for(let i=0; i<answer.length-1; i++) {
for(let j=i+1; j<answer.length; j++) {
if(sum - (answer[i]+answer[j]) === 100) {
answer.splice(j, 1)
answer.splice(i, 1)
}
}
}
return answer;
}
만약 answer[i]를 먼저지우면 index의 번호가 달라진다. 바로 splice를 다시 해주게 되면 해당 index가 아닌 다른 index에 있는 요소를 삭제하게 될 수도 있다. 따라서 순서는 j => i 가 되어야 한다.
문자열에서 A => #
function changeWord(str) {
let answer = ""
for( let x of str) {
if(x === "A") {
answer += "#"
} else {
answer += x
}
}
return answer
}
string의 replace 메서드를 이용해보자.
function changeWord(str) {
let answer = str
answer = answer.replace(/A/g, '#') //정규표현식과 global
return answer
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/replace
문자열에서 주어진 문자와 일치하는 문자는 몇 개?
let sum = 0;
function sameWord(s, str) {
for(x of str) {
if (x === s) {
sum += 1
}
}
return sum
}
split을 사용하면 해당문자(s)가 str 가장 앞이나 뒤에 나와도 빈문자열을 요소로 추가하기 때문에 아래와 같은 코드는 동작한다.
function sameWord(s, str) {
let answer = str.split(s)
return answer.length - 1
}
대문자는?
let sum = 0;
function isUpperCase(str) {
for(x of str) {
if (x === x.toUpperCase()) {
sum += 1
}
}
return sum
}
charCodeAt()을 사용하면 대문자의 코드(65- 90)와 소문자의 코드(97 - 122)가 다르기 때문에 대문자와 소문자를 구별할 수 있다.
let sum = 0;
function isUpperCase(str) {
let num=x.charCodeAt();
if(num >=65 && num<=90) {
sum++;
}
return sum
}
대문자로 통일
function toUpperCase(str) {
return str.toUpperCase()
}
function toUpperCase(str) {
let answer=''
for(let x of str) {
let num=x.charCodeAt()
if(num>=97 && num<=122) {
answer+=String.fromCharCode(num-32);
} else {
answer += x
}
}
}
String.fromCharCode()는 코드로부터 문자열을 생성해 반환한다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode
대문자는 소문자로, 소문자는 대문자로
answer = ''
function changeLetterCase(str) {
for(x of str) {
if(x === x.toUpperCase()) {
answer += x.toLowerCase()
} else {
answer += x.toUpperCase()
}
}
return answer
}
가장 긴 문자열 찾기
let answer = ''
let max = 0;
function longestString(arr) {
for(let i=0; i<arr.length; i++) {
if (arr[i].length > max) {
max = arr[i].length
answer = arr[i]
}
}
return answer
}
가운데 문자
let answer = ''
function centerLetter(str) {
if (str.length % 2 === 1) {
return answer += str[Math.floor(str.length/2)]
} else {
return answer = str[(str.length/2 - 1)] + str[str.length/2]
}
}
function centerLetter(str) {
let answer = ''
let mid=Math.floor(str.length/2)
if (str.length % 2 === 1) {
return answer = str.substring(mid, mid+1)
} else {
return answer = str.substring(mid-1, mid+1)
}
}
substring()은 string 객체의 시작 인덱스로부터 종료 인덱스 전까지 문자열의 부분 문자열을 반환한다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/substring
중복문자제거
function removeSameLetter(str) {
let answer = ''
for(let i=0; i<str.length; i++){
if(str.indexOf(str[i])===i) {
answer += str[i]
}
}
return answer
}
같은 문자는 몇 개?
function howManySameLetter(s, str) {
let answer = 0
let position = str.indexOf(s)
while(position !== -1) {
answer += 1
position = str.indexOf(s, position+1)
}
return answer
}
while은 조건문이 참일 때 실행되는 반복문이다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/while
중복단어제거
function howManySameWord(arr) {
let answer = []
for(let i=0; i<arr.length; i++) {
if(i === arr.indexOf(arr[i])){
answer.push(arr[i])
}
}
return answer
}
filter로 간단하게 만들어보자. filter 함수 내에서 v는 arr요소의 value고, i는 index 값이다. 참이 되는 값만 모아 새로운 배열로 반환한다.
function howManySameWord(arr) {
let answer;
answer = arr.filter( (v,i) => {
if(arr.indexOf(v) === i) return true;
});
return answer
}
//더 간단하게?
function howManySameWord(arr) {
let answer;
answer = arr.filter( (v,i) => {
return arr.indexOf(v) === i
});
return answer
}