알고리즘 풀이

항해99 알고리즘 1일 차(1)

jann2 2021. 11. 8. 21:40

1.직사각형 별찍기

 

문제 설명

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


제한 조건

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

예시

입력

5 3

출력

*****

*****

*****

 

 

문제

process.stdin.setEncoding('utf8');

process.stdin.on('data', data => { //입력받은 숫자를 'data에 받는다'

    const n = data.split(" "); // data(입력받은 숫자)를 배열로 변경

    const a = Number(n[0]), b = Number(n[1]); //a는 한줄에대한 별의 갯수, b는 몇줄 출력

    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++){ //i을 선언해주고 몇줄(b)만큼 반복

        let str = ""; //출력할 변수 선언

        for(let j=0; j<a; j++){ // j선언후 별을 한줄에 몇개 찍을지 반복

            str = str + "*" //출력할 변수에 별을 담는다

        }

    console.log(str) // 출력

    }



});

 

2. 짝수와 홀수

https://jann2codingdiary.tistory.com/8

 

항해99 2주차 알고리즘 문제 풀이1

문제 설명 정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요. 제한 조건 num은 int 범위의 정수입니다. 0은 짝수입니다. 입출력 예 numreturn 3 "Odd" 4 "

jann2codingdiary.tistory.com

3. 가운데 글자 가져오기

 

문제 설명

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

재한사항

  • s는 길이가 1 이상, 100이하인 스트링입니다.

입출력 예

s return
"abcde" "c"
"qwer" "we"

 

문제

function solution(s) {

    var answer = ''

 

    return answer;

}


풀이

       //a,b,c,d

index=[0,1,2,3]

 

function solution(s) {

    var answer = '';

    if (s.length % 2 == 0) { //s의 length를 2로 나눈 값이 0이면(짝수이면)

      //answer값은 s.length를 2로나눈 값에 -1을 해준 값의 인덱스 + s.length를 2로 나눈값의 인덱스

       answer = s[s.length / 2 -1] + s[s.length / 2]

    } else {   //홀수이면

        answer = s[s.length / 2 -0.5]  //answer값은 s.length를 2로 나눈 값에 -0.5를 해준 값의 인덱스

    }

    return answer;

}

 

 

다른풀이

function solution(s) {

    return s.substr(Math.ceil(s.length / 2) - 1, s.length % 2 === 0 ? 2 : 1);

}

// substr()은 문자열에서 특정 부분을 잘라낼 때 쓰인다.

-> substr(시작위치 , 자를 길이)

// 시작위치는 Math.ceil(s.length / 2) -1 -> 문자의 길이를 반으로 나눈 후 Math.ceil()로 올림 하고, 1을 뺴준다.

// 자를 길이는  

짝수

-> 문자의 길이를 반으로 나누고 나머지가 0일 때 길이는 2

홀수

-> 문자의 길이를 반으로 나누고 나머지가 0일 때 길이는 1

 

** 

Math.floor() : 소수점 이하를 버림한다.
Math.ceil() : 소수점 이하를 올림한다.
Math.round() : 소수점 이하를 반올림한다.

substr(시작위치 , 자를 길이)

 

4. 두 정수 사이의 합

문제 설명

두 정수 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

a b return
3 5 12
3 3 3
5 3 12

 

문제

function solution(a, b) {

    var answer = 0;

    return answer;

}

 

문제 풀이

function solution(a, b) {

    var answer = 0;

    if (a < b) { //a가 b보다 작을 때

        for(let i=a; i<=b; i++) { //i는 a부터 b보다 작거나 같을 때까지 +되면서 반복한 값

            answer += i;  //answer = 0+i

        }

    }else if (a > b) { //a가 b보다 클 때

            for(let i=b; i<=a; i++) //i는 b부터 a보다 작거나 같을 때까지 +되면서 반복한 값

                answer += i; //answer = 0+i

    } else { //a와 b가 같을때

                answer = a; //answer = a

            }

    return answer;

}

 

 

다른풀이

function adder(a, b){

    var result = 0

    //함수를 완성하세요

   
    //가우스의 공식

1부터 n까지의 숫자의 합을 구할 때

n(n+1)/2

  

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

 

 

***Math.abs

주어진 숫자의 절대값.

 

Math.abs('-1'); // 1

Math.abs(-2); // 2

Math.abs(null); // 0

Math.abs(''); // 0

Math.abs([]); // 0

Math.abs([2]); // 2

Math.abs([1,2]); // NaN

Math.abs({}); // NaN

Math.abs('string'); // NaN

Math.abs(); // NaN

 

빈 객체, 하나 이상의 요소를 가진 배열, 숫자가 아닌 문자열, undefined나 빈 매개변수를 받으면 NaN을 반환합니다. null, 빈 문자열이나 빈 배열을 제공하면 0을 반환합니다.