[프로그래머스] 220114 TIL

Hyunji·2022년 1월 14일
0

알고리즘

목록 보기
3/51
post-thumbnail

오늘 내가 맡았던 가운데 글자 가져오기 없는 숫자 더하기 를 제외한 다른 4문제에 대한 풀이를 정리해 놓으려고 한다.

알고리즘은 C언어로만 조금 접해봐서 아직 javascript 문법을 다 알고 사용할 수 있는게 아니라 어렵지만 하나씩 배우면서 해결 해나가야지...!


직사각형 별찍기

문제설명

이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.

제한 조건

  • n과 m은 각각 1000 이하인 자연수입니다.

예시

입력
5 3

출력

*****  
*****  
*****

문제풀이

미리 주어진 코드 부분은

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);
    console.log(a);
    console.log(b);
});

이부분이다.

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);

    for (let i = 0; i<b; i++) {
        let str = "";
        for (let j = 0; j<a; j++) {
            str += "*";
        }
        console.log(str);
    }
    
});

변수 i를 선언 해준뒤 출력해야하는 줄(b) 만큼 반복하는 for 문을 작성하고 출력할 변수 str을 선언 해주었다.
변수 j를 선언 해준뒤 출력해야하는 별() 갯수만큼 반복하는 for 문을 작성하고 출력할 변수에 을 넣어주었다.

문제에서 직사각형 별을 출력하라고 제시되어 있으므로 console.log() 로 출력해주기.


짝수와 홀수

문제 설명

정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.

제한 조건

  • num은 int 범위의 정수입니다.
  • 0은 짝수입니다.

입출력 예시

numreturn
3"Odd"
4"Even"

문제풀이

function solution(num) {
    if (num % 2 == 0) {
        return "Even"
    } else {
        return "Odd"
    }
    return answer;
}

예전에 C언어로도 풀어본 적이 있어서 쉽게 풀 수 있었던 것 같다.
짝수인지 홀수인지 if 문을 통해 판별해 주었다. (나머지가 0이면 짝수, 아니라면 홀수) 짝수일 경우 "Even"을 return 해주었고 아니라면 "Odd"를 return 해주었다.

다른 사람의 코드

 function evenOrOdd(num) {
  return num % 2 ? "Odd" : "Even";
}

삼항연산자를 이용해서 코드를 작성했는데 이렇게 한 줄로 줄일 수 있다니.... 역시 나는 아직 갈 길이 멀다 ㅋㅋㅋ


두 정수 사이의 합

문제설명

두 정수 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의 대소관계는 정해져있지 않습니다.

입출력 예시

abreturn
3512
333
5312

문제 풀이

function solution(a, b) {
    let answer = 0;
    let min;
    let max;
    
    if (a >= b){
        max = a;
        min = b;
    } else {
        max = b;
        min = a;
    }
    
    for (let i = min; i<=max; i++){
        answer += i;
    }
    
    return answer;
}

answer값을 리턴해줘야 하기 때문에 먼저 answer값을 0으로 초기화 해주었다. 그리고 작은 수, 큰 수를 구분하기 위해 변수 min,max를 선언 해주었다.
if문을 통해 a가 b보다 작거나 크다면 max에 넣어주고 b는 min에 넣어주었고 반대의 경우에는 a를 min에, b를 max에 넣어주었다.
a와 b사이에 속한 모든 정수의 합을 구해야 하기 때문에, for문을 통해 i 가 min일때, i가 max와 같거나 작을때까지 i를 증가시켜 나가도록 for문을 작성 하였고 i의 값을 answer에 넣어주었다.
그리고 answer값을 리턴하도록 코드를 작성 하였다.

다른 사람의 코드

function adder(a, b){
    var result = 0

    return (a+b)*(Math.abs(b-a)+1)/2;
}

나는 15줄?정도 작성한 코드인데 이 분은 단 2줄로도 문제에서 요구하는 사항을 구현해내었다.
Math 메서드에 대해서 깊게 공부해야 할 것 같다.....


문자열을 정수로 바꾸기

문제설명

문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.

제한 조건

  • s의 길이는 1 이상 5이하입니다.
  • s의 맨앞에는 부호(+, -)가 올 수 있습니다.
  • s는 부호와 숫자로만 이루어져있습니다.
  • s는 "0"으로 시작하지 않습니다.

입출력 예시

예를들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다.
str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.

문제풀이

function solution(s) {
    return (Number(s))
}

찾아보니 javascript의 Number() 이라는 메서드가 문자열을 숫자로 변환해서 출력해주는 기능을 가지고 있어서 Number() 을 사용해서 문제를 풀었다.

Number() 은 다른 데이터 유형을 숫자 형식으로 변환하는데 사용할 수 있는 Number구조의 함수이다. 입력 매개변수가 정의되지 않았거나 숫자로 변환할 수 없는 경우 NaN을 return.

다른 사람의 코드

function strToInt(str){
  return str/1
  }

문자열과 숫자열의 사칙연산은 숫자열이 나오게 된다는 것을 이용해서 작성한 코드같다


하루를 돌아보며

javascript 공부가 많이 필요한 것 같다

profile
성장중인 개발자

0개의 댓글