코딩테스트/프로그래머스
[프로그래머스] 입문 Day 7 문자열, 조건문, 수학, 반복문 (Javascript)
꼽파
2023. 12. 19. 10:36
특정 문자 제거하기
문제 설명
- 문자열 my_string과 문자 letter이 매개변수로 주어집니다. my_string에서 letter를 제거한 문자열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ my_string의 길이 ≤ 100
- letter은 길이가 1인 영문자입니다.
- my_string과 letter은 알파벳 대소문자로 이루어져 있습니다.
- 대문자와 소문자를 구분합니다.
입출력 예
my_string | letter | result |
"abcdef" | "f" | "abcde" |
"BCBdbe" | "B" | "Cdbe" |
풀이 1
반복문으로 제외할 글자를 제외하고 출력하도록 함
function solution(my_string, letter) {
var answer = '';
// my_string에서 letter가 아닌 것만 출력
for (i = 0; i < my_string.length; i++) {
if (my_string[i] != letter) answer += my_string[i]
}
return answer;
}
풀이 2
split과 join메서드를 이용
function solution(my_string, letter) {
// const answer = my_string.split(letter)
// [ 'abcde', '' ], ['', 'C', 'dbe' ]
const answer = my_string.split(letter).join('')
return answer;
}
join : 배열 모든 요소를 하나의 문자열로 만들어주는 메서드
풀이 3
replaceAll 메서드 사용
function solution(my_string, letter) {
return my_string.replaceAll(letter, "");
}
replaceAll(pattern, replacement) : 해당 문자열(pattern)을 원하는 문자열(replacement)로 변환하는 메서드
→ 여기서 replace(letter, "");는 letter을 빈문자열로 반환하기 때문에 삭제하는 것과 마찬가지이다.
풀이 4
정규표현식
function solution(my_string, letter) {
// 정규 표현식 객체 생성, g는 전역검색(global search)
let reg = new RegExp(letter, 'g');
// 문자열에서 정규 표현식에 해당하는 부분을 빈 문자열로 대체하여 제거
return my_string.replace(reg, '');
}
주의할 점
- 해당 문제의 반환값이 만약 배열이었다면 풀이2에서 join 대신 filter( a => a != letter)을 쓰면 됨.
각도기
문제 설명
- 각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다.
- 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요.
예각 : 0 < angle < 90
직각 : angle = 90
둔각 : 90 < angle < 180
평각 : angle = 180
제한사항
- 0 < angle ≤ 180
- angle은 정수입니다.
입출력 예
angle | result |
70 | 1 |
91 | 3 |
180 | 4 |
풀이 1
if-else 조건문 혹은 삼항연산자
function solution(angle) {
var answer = 0;
if (0 < angle && angle < 90) { // 예각
answer = 1;
} else if (angle == 90) { // 직각
answer = 2;
} else if (90 < angle && angle < 180) { // 둔각
answer = 3;
} else { // 평각 (180도)
answer = 4;
}
return answer;
}
// 삼항연산자로 표현
function solution(angle) {
return angle < 90 ? 1 : angle === 90 ? 2 : angle < 180 ? 3 : 4;
}
풀이 2
angle이 정수라는 값을 이용하여 filter 사용
function solution(angle) {
return [0, 90, 91, 180].filter(x => x <= angle).length
// 0 < angle ≤ 180
// 0 <= angle ---> 0 < angle < 90, 1
// 0 <= angle, 90 <= angle ---> angle = 90, 2
// 0 <= angle, 90 <= angle, 91 <= angle --> 91 <= angle < 180, 3
// 0 <= angle, 90 <= angle, 91 <= angle, 180 <= angle --> 180 = angle, 4
}
출력값이 1, 2, 3, 4이므로 angle의 범위를 나눠서 배열의 길이를 추출하는 풀이이다.
이런 풀이는 어떻게 생각해내는지 모르겠다.
양꼬치
문제 설명
- 머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다.
- 정수 n과 k가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요.
제한사항
- 0 < n < 1,000
- n / 10 ≤ k < 1,000
- 서비스로 받은 음료수는 모두 마십니다.
입출력 예
n | k | result |
10 | 3 | 124,000 |
64 | 6 | 768,000 |
풀이 1
Math.trunc 이용
function solution(n, k) {
var answer = 0;
answer = n * 12000 + ((k - (Math.trunc(n / 10))) * 2000); // 지불할 금액
return answer;
}
풀이 2
틸드(double tilde) 연산자 활용
function solution(n, k) {
// 양꼬치 가격 x 인원 수(n) + 음료수 가격 x (음료수 개수 - n을 10으로 나눴을 때 몫)
let drink = (k - ~~(n/10)) * 2000;
let kkochi = n * 12000;
return drink + kkochi;
}
비트 연산자로 not을 나타내는 '~'를 두 번 쓰면 소수점이 제거됨.
짝수의 합
문제 설명
- 정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.
제한사항
- 0 < n ≤ 1000
입출력 예
n | result |
10 | 30 |
4 | 6 |
풀이 1
반복문과 모듈러 연산자로 합을 구해준다
function solution(n) {
var answer = 0;
for (let i = 2; i <= n; i++) {
if (i % 2 == 0) {
answer += i
}}
return answer;
}
풀이 2
등차수열의 합 공식을 이용
function solution(n) {
// n이하의 짝수의 개수
var half = Math.floor(n / 2);
// 짝수의 합
return half * (half + 1);
}
728x90