[D+92] 항해99 5일차(1) (1~4)

ga_ding·2022년 3월 11일
0

TIL

목록 보기
27/55
post-thumbnail

3. 가운데 글자 가져오기

function solution(s) {
    var answer = '';
     if (s.length % 2 === 1) {
    answer = s[s.length/2 - 0.5]
  } else {
    answer = s[s.length/ 2 - 1] + s[s.length / 2]
  }  
    return answer;
}

우선 홀수인지 짝수인지를 조건문으로 만들고

홀수라면 s의 길이를 2로 나눠주고 거기서 0.5를 뺐다. 그 이유는 예를 들어 'abced'일 경우 length는 5가 나온다. 거기서 2로 나누면 2.5가 나오고 0.5를 빼주면 2가 나온다. 여기서 index의 경우 2는 c로 출력된다. (index는 0부터 시작하니깐)

짝수라면 'qwer'일 때 length는 4 여기서 2로 나누면 2, index의 2는 e가 출력된다. 근데 짝수 일 경우는 가운데 두 글자를 반환하라고 했으니 e의 앞에 있는 w도 함께 출력돼야 해서 length/2에서 1을 빼준 것(index 1)을 함께 출력할 수 있게 해줬다.

1. 직사각형 별찍기


별찍기는 반복문을 배울 때 자주 쓰는 방법이라고 해서 반복문으로 접근해봤다.

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);
    let row = '*'.repeat(a)
    for (let i = 0; i<b; i++) {
        console.log(row);
    }
});

여기서 a는 가로 b는 세로를 의미한다
row라는 변수를 설정하고 a만큼 '*' 를 반복해야하는데 repeat()메소드를 사용해서 a만큼 '*'를 반복하는 코드를 작성했다.
그리고 b만큼 row를 반복한다는 반복문을 작성했다.

다른 사람들의 풀이를 확인해보면

console.log((('*').repeat(a)+`\n`).repeat(b))

해석해보자면 '*'를 a만큼 반복하고 \n을 활용해서 줄바꿈을 해주는데 그걸 또 b만큼을 반복해준다.

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

for (let i = 0; i < b; i++) {
    for (let j = 0; j < a; j++) {
        result += '*';
    }
    result += '\n'
}
console.log(result);
});

또 다른 풀이법은 세로줄 반복문 안에 가로줄 반복문을 넣고 결과값에 \n을 넣어준다.

2. 짝수와 홀수

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

간단하게 해결할 수 있는 문제!

4. 두 정수사이의 합

문제를 풀때 뭔가 반복문을 쓰면서 더한다고 생각하기는 했는데 좀 막막했다

일단 이 문제를 처음 검색해봤을 땐 "가우스 공식"을 활용하는 글들이 많았다.
n(x+y)/2 가 그 공식인데 n을 풀어 x, y로만 식을 풀어봤을 때
((y-x)+1)(x+y)/2 라는 공식이 나온다고 했다.

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

그래서 그 공식을 활용했고 a가 b보다 값이 클 경우 음수가 나올 수 있기 때문에 이 값을 절대 값으로 바꿔주는 Math.abs() 매소드도 활용했지만, 난 내가 먼저 생각했던 반복문으로 풀어보고 싶었다.
(수알못은 등차수열의 공식 이런거 잘 모르니깐..ㅇㅇ)

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

막상 풀고 보니 그렇게 어렵지는 않았는데 갑자기 내가 헷갈렸던건 answer += i 이거다.. 항상 보던건데 잘 모르고 따라치기만 했던 나..
이거 이해해보려고 혼자 공책에 계속 더하기 해봤다. 내가 이해한 바로는 i만큼 i를 계속 더해주는 것!
예를들어

for (let i = a; i <= b; i++) {
            answer += i;
        }

여기서 i가 a일때 b만큼 i를 더해줭~

<=는 a와 b가 같을 경우가 있어서 써주는 수식이라고 생각했는데 아닌가..?

오늘 배운 점

일반적으로 변수를 선언을 하는게 기본이라고 한다.
그 때 문자열은

let answer = '';

숫자일 때는

 let answer = 0;
profile
大器晩成

0개의 댓글