2023. 11. 21. 00:20ㆍ카테고리 없음
음양 더하기
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
function solution(absolutes, signs) {
var answer = 0;
for(let i in signs){
if(signs[i]===true){
answer += absolutes[i]
}else{
answer -= absolutes[i]
}
}
return answer;
}
앱솔루트와 싸인 배열은 요소의 갯수가 같다. 싸인스의 요소 갯수만큼 포문을 도는 포인문을 사용한다.
싸인문에 한 i번째 요소가 트루이면 자연수인 앱솔루트를 그대로 앤서에 더해주고 폴스값을 가지면 빼주는
로직을 만든다. 앤서를 리턴한다.
삼항 연산자를 사용하면 더 깔끔할것 같긴하다.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
핸드폰번호 가리기
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요
function solution(phone_number) {
var answer = '';
const arr=phone_number.split('')
for (let i=0 ; i<arr.length-4 ; i++){
arr[i] = '*'
}
answer = arr.join('')
return answer;
}
폰넘버는 숫자로 이루어진 문자열이다. 각자리를 split으로 쪼개서 요소로 같고 있는 어레이 arr을 만든다.
폰넘버의 길이가 얼마이든 어레이의 마지막 4개를 제외한 모든 수를 *로 바꾸면 되기때문에 포문을
arr이에 마지막 끝 4개의 요소만 남기고 요소들의 재할당으로 *로 바꿔준다. 이제 그렇게 바꾼어레이를 다시 join
매서드로 합쳐서 단순 문자열로 바꾸면 끝
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 없는 숫자 더하기
function solution(numbers) {
var answer = -1;
const sum = 1+2+3+4+5+6+7+8+9 ;
let sum2 = 0;
for(let i in numbers){
sum2 += numbers[i]
}
answer =sum-sum2
return answer;
}
0에서 9까지 숫자는 최대 1번만 들어있을수 있으니까 오히려 0부터 9까지 숫자를 모두 더해서 있는 숫자를 빼버리면
없는 숫자의 합이라는 아이디어로 문제풀이를 한다.
sum은 전부를 더한수로 잡고 sum2를 포인문을 돌려 전부 합한다. 이제 썸에서 썸2를 뺀것을 앤써로 재할당하면
끝
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 제일 작은 수 제거하기
- 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다
function solution(arr) {
var answer = [];
let minnum = arr[0]
let minumsIDX = 0;
if(arr.length===1){
answer = [-1]
return answer
}else{
for(let i in arr){
if(arr[i] <= minnum ){
minnum = arr[i]
minumsIDX = i
}
}
arr.splice(minumsIDX ,1)
answer = arr
}
return arr
}
arr이는 넘버가 들어있는 어레이 이다. arr맨 앞 요소를 미니넘이라 일단 잡고 시작한다.
일단 배열에 요소가 하나이면 -1을 하나 같은 어레이를 반환하랬으니까 맨처음 이프문으로
빼주고 시작했다. 마지막에 했어도 상관없었을것 같다. 이제 else에서 포인문을 놀려서
처음에 잡았던 미니멈보다. 작은i번째 요소를 새로운 미니멈으로 해서 재할당하고 그때 의
인덱스를 미니멈인덱스에 기록해 놓는다. 이제 스플라이스매서드를 이용해서 해당인덱스의
가장 작은값만 어레이에서 날려주고 그걸 앤써로 한다.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 가운데 글자 가져오기
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
function solution(s) {
var answer = '';
if(s.length%2===1){
let centerNumIDX = s.length/2 - 1/2
answer= s[centerNumIDX]
} else{
let centerNumIDX = s.length/2 - 1
answer= s[centerNumIDX] +s[centerNumIDX+1]
}
return answer;
}
s는 문자열이다. s의 자릿수가 짝수냐 홀수냐가 갈리므로 첫 이프문에서 s의 길이가 홀수인 조건을
세우고 트루이면 글자의 갯수의 절반에서 이분의1을 뺀게 가운데수의 인덱스이므로
그 인덱스값을 같는 요소를 반환
짝수인 경우에는 가운데 두개를 반환해야 하므로 s의 길이의 절반에서 1을 뺀값이 두개중앞에니까
그 인덱스를 같는 이웃하는 두 문자열의 합을 반환하면 끝
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 수박수박수박수박수박수?
길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.
function solution(n) {
var answer = '';
let arr=[]
for(let i=0 ; i < n ; i++){
if(i%2===0){
arr.push('수')
}else{
arr.push('박')
}
answer= arr.join('')
}
return answer;
}
그냥 n만큼의 요소를 갖는 arr인데 홀수번째는 수를 반환 짝수번째는 박을 반환한다.
포문으로 n개만큼 돌리는데 push 매서드로 arr이에 짝수 인덱스면 수를 푸쉬해주고
홀수 인덱스면 박을 푸쉬해줘서 조인 매서드로 하나의 문자열로 만들어 주면 끝
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 내적
- 길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.
- 이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)
function solution(a, b) {
var answer = 0;
for(let i=0 ; i < a.length ; i++){
answer += a[i]*b[i]
}
return answer;
}
길이가 같은 두배열이니까 그냥 인덱스가 같은 두배열의 요소들을 곱해주고 포문으로 전부 더해서 앤서에 합해주면
끝
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 약수의 개수와 덧셈
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
function solution(left, right) {
var answer = 0
let arr =[]
let arr2 = []
for(let i = left ; i<=right ; i++ ){
arr.push(i)
}
console.log(arr)
for(let i = 1 ; i < 40 ; i++){
arr2.push(i*i)
}
for(let i in arr){
let fact = arr2.find((e)=>{
return e === arr[i]
}
if( fact >=1){
answer -= arr[i]
}else{
answer += arr[i]
}
}
return answer;
}
레프트와 라이트 를 포함 그 사이에 있는 정수들을 요소로 갖는 배열arr을 포문으로 만든다.
arr이는 이제 1부터 40까지의 각숫자의 제곱을 요소로 갖는 arr2라는 어레이를 만들어 봤는데
내가 여기서 쓴 아이디어는 약수를 홀수로 갖는수들의 특징은 반드시 그 숫자가 어떤 수의 제곱의 형태라는 것이다.
즉 로직은 엉망이긴한데 그 아이디어를 접목해서 파인드함수로 arr이에 숫자가 특정수의 제곱인지를 확인해서
이프문으로 그게 트루이면 홀수개의 약수를 가지므로 차감해주고 아닌경우에는 짝수개의 약수를 가지므로
그대로 더해주게 알고리즘을 짰다.
아이디어는 좋았는데 식은 엉망이다 ㅋㅋㅋ
진짜 아이디어는 좋았는데 식만드는 능력이 어수룩해서 발전해야 곘다.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 문자열 내림차순으로 배치하기
문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.
function solution(s) {
var answer = '';
let arr = []
arr=(s.split(''))
console.log(arr)
arr.sort().reverse()
let t= arr.join('')
return t;
}
문자열인 s의 각자리를 스플릿매서드로 쪼갠 arr이를 만든다. 그 어레이를 솔트함수로 작은것부터 차례대로 정렬하고
고것을 리버스매서드를 써주면 내림차순이 된다. 그것을 조인으로 다시 하나의 문자열로 만들고 반환한다.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
부족한 금액 계산하기
새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
단, 금액이 부족하지 않으면 0을 return 하세요
function solution(price, money, count) {
var answer = -1;
let sum = 0 ;
for(let i = 1 ; i <= count ; i++){
sum += i*price
}
if(sum <= money){
answer =0
}else{
answer = sum-money
}
return answer;
}
진짜 이문제 더 빨리 풀수 있었는데 문제 해석을 잘못해서 한참 해멨다. ㅜㅜ
3개의 인자가 주어지는데 가격 가진금액 횟수이다.
매번 탈때마다. price 곱하기 인덱스만큼 오르므로 그것들을 모두 합한게 머니랑 비교했을때 크냐작냐를 구분해서
결과값을 내면 된다.
일단 빈 썸을 두고 포문으로 이용금액에 인덱스를 곱한것을 누적해서 전체 이용요금을 산출한다.
reduce매서드 써도 되는 문제들이 많았는데 .reduce낯서니까 pass
이제 전체 총 이용요금합이 가진돈보다 적으면 앤써를 0으로 하고
이용요금이 더많으면 썸에서 가진돈을 빼서 부족금을 앤써로 반환한다.