일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- leetcode
- 삼항연산자
- 엘리스 ai 트랙
- [파이썬 실습] 중급 문제
- 날씨 웹 만들기
- [파이썬 실습] 심화 문제
- 자바스크립트 날씨 웹 만들기
- 개발공부
- 간단한 날씨 웹 만들기
- JavaScript
- 자바스크립트 split()
- 자바스크립트 날씨
- 엘리스 AI 트랙 5기
- 부트캠프
- 개발일기
- 프론트개발공부
- 자바스크립트
- 자바스크립트 sort()
- 코드스테이츠
- reactnativecli
- 리트코드
- [파이썬 실습] 기초 문제
- 자바스크립트 reduce()
- HTML
- 코딩부트캠프
- [AI 5기] 연습 문제집
- 프론트개발
- 엘리스
- RN 프로젝트
- 프로그래머스
- Today
- Total
개발조각
[알고리즘 풀이_Lv0] A로 B 만들기, 팩토리얼, k의 개수, 가까운 수 본문
*제주코딩베이스캠프의 JavaScript 알고리즘 100일 챌린지를 참고로 정리하고 있습니다.*
A로 B 만들기_20번째
문제
https://school.programmers.co.kr/learn/courses/30/lessons/120886
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문자열 before와 after가 매개변수로 주어질 때,
before의 순서를 바꾸어 after를 만들 수 있으면 1을,
만들 수 없으면 0을 return 하도록 solution 함수를 완성해보세요.
소스 코드
function solution(before, after) {
return before.split('').sort().join('') === after.split('').sort().join('') ? 1 : 0 ;
}
1. before
- 문자열을 배열로 만들어준다.
- 배열을 정렬한다.
- 정렬한 배열을 다시 문자열로 바꾼다.
2. after도 before와 똑같이 진행한다.
3. 정렬한 문자열 before, after이 같으면 1 아니면 0을 반환한다.
팩토리얼_21번째
문제
https://school.programmers.co.kr/learn/courses/30/lessons/120848
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 * 4 * 3 * 2 * 1 = 120 입니다.
정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.
해결방안
function solution(n) {
let i = 1;
let factorial = 1;
while(factorial <= n){
i+= 1
factorial *= i
}
return i;
}
위와 같이 쓰면 +1한값이 나온다.
이유. f === n일 경우에 한번 더 while문이 실행되기 때문이다.
n = 120;
i f f<=120
1 1 f<=120
2 2 f<=120
3 6 f<=120
4 24 f<=120
5 120 f<=120
그래서 아래와 같이 return i-1을 해주어야 된다.
function solution(n) {
let i = 1;
let factorial = 1;
while(factorial <= n){
i+= 1
factorial *= i
}
return i-1;
}
소스 코드
function solution(n) {
let i = 1;
let factorial = 1;
while(factorial <= n){
i+= 1
factorial *= i
}
return i-1;
}
k의 개수_22번째
문제
https://school.programmers.co.kr/learn/courses/30/lessons/120887
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다. (
1, 10에서 1개, 11에서 2개, 12에서 1개, 13에서 1개 총 6번)
정수 i, j, k가 매개변수로 주어질 때, i부터 j까지 k가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요.
구글 입사문제와 유사하다.
https://codingdojang.com/scode/393
코딩도장
프로그래밍 문제풀이를 통해서 코딩 실력을 수련
codingdojang.com
1부터 10,000까지 8이라는 숫자가 총 몇번 나오는가?
8이 포함되어 있는 숫자의 갯수를 카운팅 하는 것이 아니라 8이라는 숫자를 모두 카운팅 해야 한다.(※ 예를들어 8808은 3, 8888은 4로 카운팅 해야 함)
해결방안
// 방법1
function solution(i, j, k) {
let s = '';
for(i; i<=j; i++){
s+=i
}
return s; // 12345678910111213
return s.split(k); // ["","23456789","0","","","2","3"]
return s.split(k).length; // 7
return s.split(k).length - 1; // 6
}
Array, fill
Array(j) // [empty x 13]
Array(j-i) // [empty x 12]
Array(j-i+1) // [empty x 13] -> Array개수에 맞춰서 생성됨
// 1부터 시작해서 13에서 끝내야 됨 [1, ..., 13]
Array(j-i+1).fill(i) // [1, ..., 1]
Array(j-i+1).fill(i).map((v, idx)=>v+idx) // [1, ..., 13]
Array(j-i+1).fill(i).map((v, idx)=>v+idx).join(''); // "12345678910111213"
Array(j-i+1).fill(i).map((v, idx)=>v+idx).join('').split(k).length - 1; // 6
소스 코드
// 방법1
function solution(i, j, k) {
let s = '';
for(i; i<=j; i++){
s+=i
}
return s.split(k).length - 1;
}
// 방법 2
function solution(i, j, k) {
return Array(j-i+1).fill(i).map((v, i)=>v+i).join('').split(k).length - 1;
}
가까운 수_23번째
문제
https://school.programmers.co.kr/learn/courses/30/lessons/120890
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정수 배열 array와 정수 n이 매개변수로 주어질 때,
array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.
해결방안
전역 속성 Infinity은 무한대를 나타내는 숫자 값입니다.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity
Infinity - JavaScript | MDN
The global property Infinity is a numeric value representing infinity.
developer.mozilla.org
function solution(array, n) {
let min = Infinity; // 무한대의 수
let result = 0;
for(let i of array) {
// 두수의 차(n-i)가 min보다 작으면
if(Math.abs(n-i) < min){ // Math.abs: 절대값
min = Math.abs(n-i) // n-i를 min에 대입
result = i;
}
}
return result;
}
이렇게만 쓰면 테스트 5번이 실패가 뜸
이유. "가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다."라는 조건이 있어서
function solution(array, n) {
let min = Infinity;
let result = 0;
for(let i of array.sort()) {
if(Math.abs(n-i) < min){
min = Math.abs(n-i)
result = i;
}
}
return result;
}
그래서 미리 정렬을 해줘야 된다.
소스 코드
function solution(array, n) {
let min = Infinity;
let result = 0;
for(let i of array.sort()) {
if(Math.abs(n-i) < min){
min = Math.abs(n-i)
result = i;
}
}
return result;
}
'알고리즘🅰 > 제주코딩베이스캠프 프로그래머스 문제 풀이' 카테고리의 다른 글
[알고리즘 풀이_Lv0] 외계어 사전, 문자열 밀기, 컨트롤 제트, 등수 매기기 (0) | 2023.03.16 |
---|---|
[알고리즘 풀이_Lv0] 한 번만 등장한 문자, 잘라서 배열로 저장하기, 진료순서 정하기, 영어가 싫어요 (0) | 2023.03.15 |
[알고리즘 풀이_Lv0] 배열 회전시키기, 외계행성의 나이, 369게임, 중복된 문자 제거 (0) | 2023.03.13 |
[알고리즘 풀이_Lv0] 문자열 뒤집기, 특정 문자 제거하기, 배열의 유사도, 가위 바위 보 (0) | 2023.03.10 |
[알고리즘 풀이_Lv0] 중복된 숫자 개수, 피자 나눠 먹기, 짝수 홀수 개수, 배열 두배 만들기 (0) | 2023.03.10 |