본문 바로가기

Java Script/알고리즘 풀이

[알고리즘] 0816

문제 : Codewars_Return Negative(8kyu)

In this simple assignment you are given a number and have to make it negative. But maybe the number is already negative?

Examples

makeNegative(1);    // return -1
makeNegative(-5);   // return -5
makeNegative(0);    // return 0
makeNegative(0.12); // return -0.12

Notes

  • The number can be negative already, in which case no change is required.

Zero (0) is not checked for any specific sign. Negative zeros make no mathematical sense.

문제풀이

/*
function makeNegative(num){

}
*/

function makeNegative(num) {
  if(num > 0){
    return num*-1;
  }else{
    return num*1;
  }
};
  1. 양수일 때 음수로 값을 반환해서 출력하고, 이미 음수일 때는 그대로 음수로 반환, 0일 때는 0을 반환해야하는 문제였다.
  2. 따라서 if 조건문을 사용해서 양수일 때 *-1을 해서 음수로 값을 반환할 수 있도록하고
  3. 이미 음수이거나 0일 때는 *1을 해서 음수나 0으로 값을 반환할 수 있도록 작성했다.

코드 비교

function makeNegative(num) {
  return -Math.abs(num);
}
  • Math.abs 메소드를 이용해서 간단하게 구현한 코드
function makeNegative(num) {
  return num < 0 ? num : -num;
}
  • 삼항 연산자를 이용해서 숫자가 0보다 작은 음수이거나 0일 시 (=true일 시) 0이나 음수 값을 그대로 반환하고, 숫자가 0보다 큰 양수 값일시(=false일 시) 값에 -를 붙여서 음수 값을 반환하도록 구현한 코드
  • -를 붙이는 것만으로 음수 값이 반환되는 것을 알 수 있었다!
function makeNegative(num) {
  return num <= 0 ? num : num*-1;
}
  • 삼항 연산자를 이용하여 양수 값일 시 *-1을 이용해서 음수 값을 반환하도록 나와 비슷하게 작성한 코드다. 하지만 위 코드에서 -를 붙이는 것만으로 음수 값을 반환할 수 있음을 배웠으므로 앞으로 음수값 반환이 필요하면 -를 이용해서 작성하면 좋을 것 같다.
  • 조건을 작성할 때 나는 그냥 0보다 크면 *-1을 해서 음수 값을 변환하는 조건으로 작성했는데, 이 코드에는 0보다 작거나 같을 시 기본 값을 반환하도록 작성했다. 이렇게 작성한 조건이 더 명확하다고 느껴졌다.

 

문제 : Codewars_Reversed Strings(8kyu)
Complete the solution so that it reverses the string passed into it.
- 'world' => 'dlrow'
- 'word' => 'drow'

문제풀이

/*function solution(str){
  
}*/

function solution(str){
  let reversedStr = "";
  for (let i = str.length - 1; i >= 0; i--){
    reversedStr += str[i];
  }
  return reversedStr;
};
  1. 배열 내 문자열을 역순으로 반환해야하는 문제
  2. reversedStr이라는 새로 생성 될 문자열을 담을 변수 생성
  3. for문을 이용해여 아래와 같이 동작하는 반복문 작성
    - 초기화 부분 : 배열 내 맨 마지막 인덱스(str.length-1)를 i 변수로 지정
    - 반복 조건 : i가 0보다 같거나 클 때 까지 반복, 0보다 작아지면 반복 중단
    - 동작 : reversedStr변수에 str의 마지막 배열부터 계속 더함
    - 동작 후 동작 : i를 하나씩 작아지게 함(sty 배열 내 인덱스를 하나씩 작아지게 함)
    +ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ+
    |    (참고) for문 구조                                   |

    |    for(초기화;반복 조건;동작 후 동작){        |
    |    동작                                                      |
    |     };                                                         |
    +ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ+
  4. 동작 후 동작 이후, 코드는 반복 조건 확인 후 ([i]가 0보다 같거나 큰지) -> 동작 [i]보다 같거나 크다면 reversedStr변수에 str 배열 내 두 번째로 큰 인덱스를 더함 -> 동작 후 동작 i를 하나씩 작아지게 함 -> 반복 조건 확인 -> 동작 -> 동작 후 동작을 반복 조건이 false 값이 될 때 까지 계속 반복
  5. 이후 return 함수로 reversedStr 반환

코드 비교

function solution(str){
  return str.split('').reverse().join('');  
}
  1. return 함수 한 줄에 작성한 코드이다.
  2. split() 메서드를 이용했다. 빈 문자열 ('')을 통해 하나의 덩어리로 이루어진 배열 내 문자열을 한 단어씩 쪼개서 새 로운 배열으로 만들도록 코드 작성
    e.g. let hi = "hello".split(""); // ["h", "e", "l", "l", "o"]
  3. reverse() 메서드를 이용해서 split 메서드를 이용해서 한 단어씩 쪼개진 배열들을 역순으로 뒤집었다. reverse() 메서드는 배열을 반전하는 메서드로, 첫 번째 배열 요소는 마지막 요소가 되고 마지막 요소는 첫 번째 요소가 된다.
  4. join() 메서드를 이용해서 reverse 메서드를 이용해서 한 단어씩 역순으로 뒤집어진 문자열 배열들을 하나의 문자열로 결합했다.

=> return 함수를 한 줄로 작성할 수 있는지 몰랐는데 한 줄로 작성한게 신박했다

추가 학습 필요한 부분

  1. Math.abs 메소드
  2. 화살표 함수
    -> 앞으로 코드 작성할 때 익숙한 if..else 구문보다 삼항 연산자 & 화살표 함수(=>)를 더 활용해보기 위해

'Java Script > 알고리즘 풀이' 카테고리의 다른 글

[알고리즘] 0821  (0) 2023.08.21
[알고리즘] 0820  (0) 2023.08.20
[알고리즘] 0817  (0) 2023.08.17
[알고리즘] 0815  (0) 2023.08.15
[알고리즘] 0814  (0) 2023.08.15