
문제 : 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.12Notes
- 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;
}
};
- 양수일 때 음수로 값을 반환해서 출력하고, 이미 음수일 때는 그대로 음수로 반환, 0일 때는 0을 반환해야하는 문제였다.
- 따라서 if 조건문을 사용해서 양수일 때 *-1을 해서 음수로 값을 반환할 수 있도록하고
- 이미 음수이거나 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;
};
- 배열 내 문자열을 역순으로 반환해야하는 문제
- reversedStr이라는 새로 생성 될 문자열을 담을 변수 생성
- for문을 이용해여 아래와 같이 동작하는 반복문 작성
- 초기화 부분 : 배열 내 맨 마지막 인덱스(str.length-1)를 i 변수로 지정
- 반복 조건 : i가 0보다 같거나 클 때 까지 반복, 0보다 작아지면 반복 중단
- 동작 : reversedStr변수에 str의 마지막 배열부터 계속 더함
- 동작 후 동작 : i를 하나씩 작아지게 함(sty 배열 내 인덱스를 하나씩 작아지게 함)
+ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ+
| (참고) for문 구조 |
| for(초기화;반복 조건;동작 후 동작){ |
| 동작 |
| }; |
+ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ+ - 동작 후 동작 이후, 코드는 반복 조건 확인 후 ([i]가 0보다 같거나 큰지) -> 동작 [i]보다 같거나 크다면 reversedStr변수에 str 배열 내 두 번째로 큰 인덱스를 더함 -> 동작 후 동작 i를 하나씩 작아지게 함 -> 반복 조건 확인 -> 동작 -> 동작 후 동작을 반복 조건이 false 값이 될 때 까지 계속 반복
- 이후 return 함수로 reversedStr 반환
코드 비교
function solution(str){
return str.split('').reverse().join('');
}
- return 함수 한 줄에 작성한 코드이다.
- split() 메서드를 이용했다. 빈 문자열 ('')을 통해 하나의 덩어리로 이루어진 배열 내 문자열을 한 단어씩 쪼개서 새 로운 배열으로 만들도록 코드 작성
e.g. let hi = "hello".split(""); // ["h", "e", "l", "l", "o"] - reverse() 메서드를 이용해서 split 메서드를 이용해서 한 단어씩 쪼개진 배열들을 역순으로 뒤집었다. reverse() 메서드는 배열을 반전하는 메서드로, 첫 번째 배열 요소는 마지막 요소가 되고 마지막 요소는 첫 번째 요소가 된다.
- join() 메서드를 이용해서 reverse 메서드를 이용해서 한 단어씩 역순으로 뒤집어진 문자열 배열들을 하나의 문자열로 결합했다.
=> return 함수를 한 줄로 작성할 수 있는지 몰랐는데 한 줄로 작성한게 신박했다
추가 학습 필요한 부분
- Math.abs 메소드
- 화살표 함수
-> 앞으로 코드 작성할 때 익숙한 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 |