항해99

TIL 8 알고리즘 공부하자

kongom2 2021. 11. 8. 11:40

가운데 글자 가져오기 [3번문제]

 

[문제설명]

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

[제한조건]

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

=> 짝수일 때 가운데 2개 문자 반환, 홀수일 때 가운데 문자 반환.

function solution(s){
  let answer = '';
  if (s.length % 2 == 0){
    answer = s[s.length / 2 - 1] + s[s.length / 2]
    //짝수일 경우
  }else{
    answer = s[s.length / 2 - 0.5]
    //홀수일 경우
  }
  return answer;
}

console.log(sol('asdsf'))

[접근방식]

- if else 문법 사용

- index 검색 기능 사용

- % 연산자 사용

 

[풀이]

1. answer변수를 만들어 빈값을 기본값으로 둔다.

2. % 연산자를 사용해 남은 값으로 문자열 길이가 짝수인지 홀수인지 파악한다.

3. 남은값이 0인 경우 짝수, 1인 경우 홀수

4. 짝수인 경우 문자열(s)의 가운데 index를 2개를 출력할 수 있도록 한다.

5. 예를 들어 문자열 길이가 4일 때, 4 나누기 2 해서 나온 값 2에서 다시 -1을 해서 index[1]로 찾아낸 값과

6. 4 나누기 2 해서 나온값 2를 index[2]로 찾아낸 값을 더하면

7. 문자열 길이가 4인 문자는 [0, 1, 2, 3] 중에 [1, 2]만 출력하게 된다.

8. 홀수인 경우 문자열(s)의 가운데 index 1개만 출력할 수 있도록 한다.

9. 이 또한 예를 들어, 문자열 길이가 3일 경우, 3 나누기 2 되어 나온값 1.5에서 0.5를 빼면 1이 나오는데

10. 이는 index 상에서 2번째 해당하는 값인 1일 됨으로

11. 문자열 길이 3인 문자에서 가운데 글짜가 출력되게 된다.

 

[문제링크]

[다른사람 풀이]


음양더하기 [7번 문제]

[문제설명]

어떤 정수들이 있습니다.

이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와

이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다.

실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.

=> true일 경우 양수로 더하기, false의 경우 음수로 더하기

function solution(absolutes, signs) {
    let answer = 0
    for (let i = 0; i < absolutes.length; i++){
        if (signs[i] === true) {
            answer = answer + absolutes[i]
        }else{
            answer = answer - absolutes[i]
        }
    }
    return answer;
}

[접근 방식]

- if else 문법 사용

- for 반복문 사용

- === 비교 연산자 사용

 

[풀이]

1. 정수값 absolutes
2. 부호값 signs
3. for 반복문을 돌려 배열의 길이 만큼 i에 값을 더함
4. if else 조건문으로 부호값인 signs가
5. true에 해당하는 정수배열들을 더하고
6. false에 해당하는 정수배열을 빼준다.

 

[문제링크]

[다른사람 풀이]

x만큼 간격이 있는 n개의 숫자 [11번 문제]

[문제설명]

함수 solution은 
정수 x와 자연수 n을 입력 받아, 
x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 
다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.
[제한조건]
x는 -10000000 이상, 10000000 이하인 정수입니다.
n은 1000 이하인 자연수입니다.
=> x를 n만큼 더해보자. x가 3이고 n이 5면 3,6,9,12,15

function solution(x, n) {
  let answer = [];
  for (let i = 0; i <= n; i++) {
    answer.push(x*i)
  }
  return answer.slice(1)
}

[접근방식]

- for 반복문 사용

- push 함수 사용

- slice 함수 사용

 

[풀이]

1. 배열을 만든다.

2. for 반복문으로 n의 수보다 작거나 같을때까지 돌린다.

3. x에 n의 숫자만큼 곱한 값을 push 함수로 배열에 넣는다.

4. 리턴된 answer 값에 slice 함수로 첫번째 배열을 제외 한 나머지 값을 출력한다.

 

[문제링크]

[다른사람풀이]

 

직사각형 별찍기

 

[문제설명]
[제한조건]
[접근방식]
[풀이]
[문제링크]
[다른사람풀이]