항해99_7기/2주차 알고리즘 기초 주차 스터디

[항해99] programmers 코딩테스트 연습문제 1~5

code10 2022. 5. 13. 22:02

[항해99] 프로그래밍 기초 주차 / 달리기반 / 7기 / D반 / 9조

 

코딩테스트 연습문제

 

1. 직사각형 별찍기

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

(제출 답)

process.stdin.setEncoding('utf8'); 
process.stdin.on('data', data => {  //data가 5 3 으로 입력됨
    const n = data.split(" ");  //data 를 공백을 기준으로 분리 [ '5', '3' ]
    const a = Number(n[0]), b = Number(n[1]); // 각각을 a, b라 칭하고

    for(let i=0; i<b; i++){  // b(세로 길이 m)만큼 다음 값을 찍어준다.
        console.log('*'.repeat(a)) // *을 a만큼 반복한 가로줄
    }
});

✅ 풀이 과정

<처음에 프로그래머스 문제 자체가 이해가 안 됐음. 2번 문제를 풀고서야 문제 출제방식 이해. repeat>

반복문 for 이용. 

별(*)은 문자열(sting)이기 때문에 ‘’가 필요. 

메소드? repeat을  활용. 

만약, 코드를 실행하는데 a값만큼 가로줄에 * a개를 repeat해주고, 

이를 b값 만큼 반복한다. 

 

a가 가로줄, b가 세로줄이라 생각하면 됨.

 

🤼‍♀️ 다른 풀이 (및 작성 예시)

let num = Number(n);
result = ''; //결과값을 문자열에 저장
for (let i = 0; i <= num; i++) {// 2. 1부터 i를 1씩 증가하며 반복하기
  for (let j = 0; j <= i; j++) { // 3.  i의 갯수 만큼
    result += '*';//별 출력하기
  }
if(i!=n){// 5. n이라면 줄바꾸지 않기
  result += '\n';// 4. 줄바꾸기
}
}
console.log(result);//결과 문자열 출력

 

2. 짝수와 홀수

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

(제출 답)

function solution(num) {
    var answer = ''; //결과값을 문자열에 저장
    if (num % 2 === 0 ){ //짝수의 나머지는 0, 짝수가 맞다면,
        return answer = "Even" 
    } else { //아니면
        return answer = "Odd"
    }
    return answer;
}

 

✅ 풀이 과정

<1번 보다 쉽게 풀었다>

조건문 if 와 else 이용.

모든 짝수는 2로 나누었을 때 나머지가 0인 것을 활용. num % 2 === 0  

 

🤼‍♀️ 다른 풀이

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

비교) num % 2 ===0 ?  "Even" : "Odd";

 

⏩추가학습 

참고 = 조건부 연산자 ‘?’ 문법:

 

if와 '?'를 사용한 조건 처리

 

ko.javascript.info

let result = condition ? value1 : value2;

평가 대상인 condition이 truthy라면 value1이, 그렇지 않으면 value2가 반환됩니다.

 

3. 가운데 글자 가져오기

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

           제한사항: s는 길이가 1 이상, 100이하인 스트링입니다.

(제출 답)

function solution(s) { 
    var answer = ''; //결과값을 문자열에 저장
    if (s.length % 2 === 0){ //문자열 길이가 짝수라면 
        answer = s.substr(s.length/2 -1, 2) // 가운데 두 글자 반환
    } else {
        answer = s.substr(s.length/2, 1)
    }
    return answer;
}

✅ 풀이 과정

string method를 이용.

substr(start, length)를 활용.

 

🤼‍♀️  다른 풀이

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

Math.ceil  소수점 첫째 자리에서 올림

Math.floor  소수점 첫째 자리에서 내림(버림)

Math.round 소수점 첫째 자리에서 반올림

 

⏩추가학습 : string method 비교

 

[Javascript] substr(), substring(), slice() 비교

string.slice(start, end) Javascript에서 substr(), substring(), slice() 함수는 모두 문자열을 잘라주는 역할을 합니다. 이 함수들은 모두 비슷하지만, 조금씩 작동 방법이 다릅니다. 이 세가지 함수를 비교해..

hianna.tistory.com

 

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

 

function solution(a, b){
    var answer = 0; //답은 합계(sum), answer을 출력해야 하므로 answer을 sum으로 이해.
    //a, b의 숫자는 랜덤. 작은 수 ~ 큰 수 사이를 논하기 위해 3가지 조건(a 기준: 크거나 작거나 같거나)을 생각한다.
    if ( a < b ){ 
        for (let num = a; num < b; num++){ // a와 b 사이의 정수를 모두 불러온다
        answer += num // 불러온 정수를 모두 더한다
       }
    } else if (a > b) {
        for (let num = b; num < a; num++){
           answer += num
           }
    } else {
            return a; //a=b 인 경우이기 때문에, a 대신 b를 써도 출력됨.
        }
    return answer;

}

 

✅ 풀이 과정

If 조건문, for 반복문 이용

 

🤼‍♀️  다른 풀이

function adder(a, b){
    var result = 0
    return (a+b)*(Math.abs(b-a)+1)/2;
}

Math.abs() method returns the absolute value of a number. 절대값

a 와 b 를 더한 값에 (두 값의 차이에서 1을 더한 뒤 2로 나눈 값을) 곱하면 총합.

자연수 1부터 n까지의 총합 구하는 공식이 n(n+1)/2 인데 이것을 응용한 것이라고 보면 됨..?? 수학ㅠ

 

 

5. 문자열을 정수로 바꾸기

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

    제한 조건

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

입출력 예

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

(제출 답)

function solution(s) {
    var answer = Number(s); //그냥 +s 만 해도 됨.
    return answer;
}

✅ 풀이 과정

문제를 잘못 이해하고 있어서, 시간을 엄청 잡아 먹었던 문제인데.. 문제 다시 읽고 너무 쉬운 문제였음을 깨달았다. 1번 문제 별찍기에서 했number 활용

 

⏩. 추가학습 

https://www.w3schools.com/js/js_number_methods.asp

 

JavaScript Number Methods

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com