Q1. 직사각형 별찍기
문제 설명
이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.
제한 조건
- n과 m은 각각 1000 이하인 자연수입니다.
입출력의 예
입력
5 3
출력
*****
*****
*****
나의 풀이
/* 오답 처리되는 코드입니다. */
// n=가로, m=세로
function solution(n m){
// 바깥쪽 for문은 세로 방향
for(i=0; i<m; i++)
{
// 안쪽 for문은 가로 방향
for(j=0; j<n; j++)
{
console.log("*");
}
console.log("\n"); // 가로 한 줄 출력이 끝나면 다음 줄로 줄바꿈
}
}
위 코드 자체에는 오류가 없지만 프로그래머스에 돌리면 오답 처리됩니다.
process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
를 쓰지 않고 function만으로 프로그래머스에 통과하기는 어려워 보입니다.
다른 사람의 풀이
process.stdin.setEncoding('utf8');
process.stdin.on('data', data => { // 입력받은 숫자를 'data에 받는다'
const a = data.split(" "); // data(입력받은 숫자)를 배열로 변경
const n = Number(a[0]), m = Number(a[1]); // n = 가로, m = 세로
for(let i=0; i<m; i++){ // 세로 방향으로 m줄 출력
let star = ""; // 출력할 변수 선언
for(let j=0; j<n; j++){ // 가로 방향으로 n줄 출력
star = star + "*" // 출력할 변수에 별을 담음
}
console.log(star) // 별 출력
}
});
Q2. 짝수와 홀수
문제 설명
정수 num이 짝수일 경우 "Even"을 반환하고
홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.
제한 조건
- num은 int 범위의 정수입니다.
- 0은 짝수입니다.
입출력의 예
num | return |
3 | "Odd" |
4 | "Even" |
나의 풀이
function solution(num) {
var result = '';
if(num%2 == 0){
result = "Even";
} else{
result = "Odd";
}
return result;
}
Q3. 가운데 글자 가져오기
문제 설명
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요.
단어의 길이가 짝수라면 가운데 두 글자를 반환하면 됩니다.
제한 조건
- s는 길이가 1 이상, 100 이하인 스트링입니다.
입출력의 예
s | return |
"abcde" | "c" |
"qwer" | "we" |
나의 풀이
function solution(s) {
let howlong = s.length; // 입력받은 글자의 수를 변수에 담음
if(s.length%2 == 0){ // 입력받은 글자의 수가 짝수라면
answer = s[howlong/2 - 1] + s[howlong/2];
// 예를 들어, 글자의 길이가 4라면 4/2 = 2, s[1]과 s[2] 출력
} else{ // 입력받은 글자의 수가 홀수라면
howlong = howlong + 1;
answer = s[howlong/2 - 1];
// 예를 들어, 글자의 길이가 5라면 i = (5+1)/2 = 3, s[i-1] 출력
}
return answer;
}
Q4. 두 정수 사이의 합
문제 설명
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
제한 조건
- a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
- a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
- a와 b의 대소관계는 정해져있지 않습니다.
입출력의 예
a | b | return |
3 | 5 | 12 |
3 | 3 | 3 |
5 | 3 | 12 |
나의 풀이
function solution(a, b) {
var answer1 = 0; // 0부터 둘 중 더 큰 값까지의 합을 넣을 변수
var answer2 = 0; // 0부터 둘 중 더 작은 값까지의 합을 넣을 변수
var answer = 0; // 0부터 둘 중 더 큰 값까지의 합에서 0부터 둘 중 더 작은 값까지의 합을 뺀 값을 넣을 변수
if(a>b){
answer1 = a*(a+1)/2; // 가우스 법칙으로 0부터 a까지 수를 모두 더함
answer2 = (b-1)*b/2; // 가우스 법칙으로 0부터 b-1까지 수를 모두 더함
} else{
answer1 = b*(b+1)/2;
answer2 = (a-1)*a/2;
}
answer = answer1 - answer2; // 0부터 큰 값까지의 합에서 0부터 작은 값 바로 전 값까지의 합을 뺌
return answer;
}
Q5. 문자열을 정수로 바꾸기
문제 설명
문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.
제한 조건
- s의 길이는 1 이상 5이하입니다.
- s의 맨앞에는 부호(+, -)가 올 수 있습니다.
- s는 부호와 숫자로만 이루어져있습니다.
- s는 0으로 시작하지 않습니다.
입출력의 예
예를들어 str이 1234이면 1234를 반환하고, -1234이면 -1234를 반환하면 됩니다.
str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.
나의 풀이
스스로 풀지 못했지만, 풀려고 헤매다가 어느 블로그에서 발견한 메소드입니다.
: /[정규식 표현]/옵션 → 이때 옵션이 g면 전체 검사, i면 대소문자 모두 검사.
숫자만 추출 | 문자만 추출 |
str.replace(/[a-z]/gi,""); | str.replace(/[1-9]/g,""); |
다른 사람의 풀이 1.
function solution(s) {
return Number(s);
}
스트링을 number로 바꿔주는 Number 메소드를 사용.
다른 사람의 풀이 2 & 3.
function solution(s){
return s/1;
}
function solution(s){
return +s;
}
자바스크립트의 특징 중 하나로, 문자열을 숫자 연산자(+, -, *, /, %)와 함께 사용하면
JS가 문자열을 숫자로 자동으로 바꿈.
Q6. 없는 숫자 더하기
문제 설명
0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다.
numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
제한 사항
- 1 ≤ numbers의 길이 ≤ 9
- 0 ≤ numbers의 모든 원소 ≤ 9
- numbers의 모든 원소는 서로 다릅니다.
입출력 예
numbers | result |
[1,2,3,4,6,7,8,0] | 14 |
[5,8,4,0,6,7,9] | 6 |
입출력 예 #1
- 5, 9가 numbers에 없으므로, 5 + 9 = 14를 return 해야 합니다.
입출력 예 #2
- 1, 2, 3이 numbers에 없으므로, 1 + 2 + 3 = 6을 return 해야 합니다.
나의 풀이
function solution(numbers){
let sum = 0, answer = 0;
// 일단 numbers[i]의 값을 모두 확인한다.
for(i=0; i < numbers.length; i++){ // numbers에 존재하는 값의 개수만큼 for문을 돌린다.
if(numbers[i] == 0||1||2||3||4||5||6||7||8||9){ // 만약 numbers에 있는 값이 0~9 중
sum = sum + numbers[i]; // 어느 값과도 일치하면 그 값끼리 더해 sum에 담는다.
}
}
answer = 45 - sum; // 0부터 9까지의 합에서 numbers에 있는 값끼리 더한 값인 sum을 뺀다.
// 0부터 9까지의 합: 9*10/2 = 45
return answer;
}
Q7. 음양 더하기
문제 설명
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
- absolutes의 길이는 1 이상 1,000 이하입니다.
- absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
- signs의 길이는 absolutes의 길이와 같습니다.
- signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.
입출력 예
[4,7,12] | [true,false,true] | 9 |
[1,2,3] | [false,false,true] | 0 |
입출력 예 #1
- signs가 [true,false,true] 이므로, 실제 수들의 값은 각각 4, -7, 12입니다.
- 따라서 세 수의 합인 9를 return 해야 합니다.
입출력 예 #2
- signs가 [false,false,true] 이므로, 실제 수들의 값은 각각 -1, -2, 3입니다.
- 따라서 세 수의 합인 0을 return 해야 합니다.
나의 풀이
// 정수 = 부호 + 절댓값
function solution(absolutes, signs) { // absolutes = 절댓값, signs = 부호, 둘 다 배열.
let num = 0, sum = 0;
for(i=0; i<absolutes.length; i++){
if(signs[i] == 0){ // 주어진 정수가 음수이면
num = -absolutes[i]; // 그 정수의 절댓값에 -부호를 붙여 num에 넣음.
} else{
num = absolutes[i]; // 주어진 정수가 양수이면 절댓값 그대로 num에 넣음.
} // 이제 절댓값과 부호 부분으로 나뉘었던 정수가 원래 형태로 복원됨.
sum = sum + num; // 위 if문을 통해 얻은 원래 정수 값을 모두 더해 sum에 넣음.
}
return sum;
}
Q8. 평균 구하기
문제 설명
정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요.
제한 사항
- arr은 길이 1 이상, 100 이하인 배열입니다.
- arr의 원소는 -10,000 이상 10,000 이하인 정수입니다.
입출력의 예
arr | return |
[1,2,3,4] | 2.5 |
[5,5] | 5 |
나의 풀이
function solution(arr) {
let avg = 0;
let sum = 0;
// 평균 = 배열에 담긴 모든 값의 "합"/배열에 담긴 값의 "개수"
for(i=0; i<arr.length; i++){
sum = sum + arr[i];
}
avg = sum/arr.length;
return avg;
}
'프로그래밍 > Javascript 알고리즘 문제' 카테고리의 다른 글
Javascript 알고리즘 문제 - 17번부터 28번까지 (0) | 2022.07.21 |
---|---|
Javascript 알고리즘 문제 - 9번부터 16번까지 (0) | 2022.07.19 |