다재다능 개발자 성장기 🚀
항해99 👩💻5일차 TIL 본문
🎉오늘의 한 일🎉
오늘부터 알고리즘 주차가 시작되어서 새로운 팀원분들과 게더에서 만나 인사를 나누고 계획을 세운 뒤, 바로 알고리즘 문제를 풀었다. 알고리즘 뿌시기 화이팅!😊
🥰자바스크립트 알고리즘 풀이🥰
직사각형 별찍기
이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.
풀이
process.stdin.setEncoding('utf8'); // n(가로) : 5 , m(세로) : 3
process.stdin.on('data', data => {
const s = data.split(" ") //data로 입력된 값을 공백으로 나누어 s에 저장
const n = Number(s[0]), m = Number(s[1]) // s에 저장된 값들을 따로 나누어 n,m 변수에 저장
//console.log(n,m) // 입력된 데이터가 잘 나누어져 저장되었는지 확인 // 5,3 출력됌
for(let i=0; i<m; i++){ //기준을 세로(행)로 잡는다. // 몇줄만큼 반복
let str = "" // 출력할 변수 선언
for(let j=0; j<n; j++){ // 한줄에 찍히는 별의 갯수
str += "*"
}
console.log(str)
}
});
⭐ 별찍기 문제야말고 알고리즘 문제의 가장 기본 아닐까 생각해본다. 간단한 문제 같지만 개념을 확실히 잡아야 풀 수 있는 문제같다. 난 우선 입력값을 split()으로 나누어 각자 다른 변수에 넣어주었다. 그리고 이중 for문을 사용하여 첫 번째 for문은 행(세로)으로서 몇 줄만큼 반복할지 해주고, 두 번째 for문은 한 줄(행)에 찍히는 별의 갯수를 지정해주었다.
가운데 글자 가져오기
문제 설명
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
풀이
function solution(s) {
var answer = '';
if(s.length % 2 == 0){ //'단어의 길이'가 짝수라면
answer = s[s.length / 2 - 1] + s[s.length / 2] //단어의 가운데 인덱스값 구하기
}else{
answer = s[Math.floor(s.length/2)] //홀수일 경우 2로 나눈뒤 반내림 해주기
}
return answer
}
⭐입력값의 길이가 짝수일때는 가운데 두 글자를 출력해주고, 홀수일 경우 반내림 함수인 Math.floor()을 사용하여 가운데 숫자만 출력해준다.
두 정수 사이의 합
문제 설명
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
풀이
function solution(a, b) {
var answer = 0;
if(a<=b){ //a가 b보다 작거나 같을 때
for(let i=a; i<=b; i++){
answer += i
}
}if(a>b){ //b가 a보다 작거나 같을 때
for(let i=b; i<=a; i++){
answer += i
}
}
return answer;
}
⭐ for문을 이용하여 두 정수 a 부터 b까지의 길이를 구하여 그 사이의 값들(i) 을 더해줘서 출력해준다.
문자열을 정수로 바꾸기
문제 설명
문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.
풀이
function solution(s) {
var answer = 0;
answer = s/1 //자바스트립트의 속성상 숫자를 연산해주면 타입이 숫자로 변환된다.
return answer;
}
⭐ 자바스크립트 언어의 특성상 숫자를 연산해주면 타입이 숫자로 변환된다.
없는 숫자 더하기
문제 설명
0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
풀이
function solution(numbers) { // [5,8,4,0,6,7,9]
var answer = 0;
var sum = 0;
for(let i=0;i<10;i++){
if(!numbers.includes(i)){
answer = sum += i
}
}
return answer;
}
⭐.includes() 함수를 찾아보고 풀었다. numbers에 들어있지 않는 i 를 구한 뒤 반복해서 더해주고 출력하면 된다.
음양 더하기
문제 설명
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
풀이
function solution(absolutes, signs) { // [4,7,12], [true,false,true]
let answer = 0;
for(let i=0;i<absolutes.length;i++){
if(signs[i] == true){
answer += absolutes[i]
}else{
answer -= absolutes[i]
}
}
return answer
}
⭐ signs의 값이 true일 때와 false일때를 순서대로 찾아 answer에 absolutes의 값들을 계속해서 더하여 출력해준다.
평균 구하기
문제 설명
정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요.
풀이
function solution(arr) {
var answer = 0;
var sum = 0;
for(let i=0;i<arr.length;i++){
answer = sum += arr[i]
}
return answer/arr.length
}
⭐ arr배열의 길이만큼 i를 돌린 뒤, arr배열의 해당 값들을 answer에 더해준다. 그 다음 arr의 길이로 나눠주면 평균값이 출력된다.
핸드폰 번호 가리기
문제 설명
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
풀이
function solution(phone_number) {
var answer = '';
for(let i=0;i<phone_number.length;i++){ //번호만큼 i를 돌리고
if(i<phone_number.length-4){ // 뒤에 4자리를 제외하고
answer += "*" // *을 출력한다.
}else{
answer += phone_number[i] //나머지엔 번호 출력
}
}
return answer
}
⭐ phone_number.length-4를 통해 핸드폰 뒤자리 네 자리를 제외하고는 * 을 출력해준다. 그 외에는 원래의 폰 번호를 출력해주면 된다.
x만큼 간격이 있는 n개의 숫자
문제 설명
함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.
풀이
function solution(x, n) { // 2, 5
var answer = []; //빈 리스트 만들어주기
for(let i=1;i<=n;i++){
answer.push(x*i)
}
return answer
}
⭐ 문제를 보고 충실히 풀었더니 쉽게 풀렸다.
부족한 금액 계산하기
문제 설명
새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
단, 금액이 부족하지 않으면 0을 return 하세요.
풀이
function solution(price, money, count) { // 3, 20, 4
let totalPrice = 0;
var answer = 0;
for(let i=1;i<count+1;i++){
totalPrice += price*i // price의 값은 이용횟수에 비례하여 증가
}if(money<totalPrice){ // 현재 있는 돈이 price보다 적다면
answer = totalPrice-money // 모자란돈 반환
}else{ // 모자라지 않다면
answer = 0 // 0반환
}
return answer
}
⭐ price의 값이 이용횟수(n)에 따라서 비례하도록 한 뒤 총비용(totalPrice)에 모두 더해준다. 그 다음 if문을 통하여 지금 내가 가진돈(money)보다 총비용(totalPrice)가 더 많다면 뺄셈을 통해 모자른 돈을 출력해주고, 만일 내가 가진돈이 모자르지 않다면 0을 반환해준다.
🍧느낀점🍧
항상 알고리즘은 막막하게 여겨졌는데, 작정하고 하루종일 풀다보니 이제 푸는 약간의 감이 생긴것 같다😊 역시 뭐든지 하다보면 느는 것 같다. 뿌듯!!😊 앞으로도 화이팅!!
'항해99_6기_TIL' 카테고리의 다른 글
항해99 👩💻8일차 TIL (0) | 2022.03.15 |
---|---|
항해99 👩💻6일차 TIL (0) | 2022.03.12 |
항해99 👩💻4일차 TIL (0) | 2022.03.10 |
항해99 👩💻3일차 TIL (0) | 2022.03.10 |
항해99 👩💻2일차 TIL (0) | 2022.03.09 |