728x90
프로그래머스에서 음양 더하기 알고리즘 문제를 풀어보았다.
https://programmers.co.kr/learn/courses/30/lessons/76501
문제 설명
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
제한사항
- absolutes의 길이는 1 이상 1,000 이하입니다.
- absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
- signs의 길이는 absolutes의 길이와 같습니다.
- signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.
입출력 예
입출력 예 설명
입출력 예 #1
- signs가 [true,false,true] 이므로, 실제 수들의 값은 각각 4, -7, 12입니다.
- 따라서 세 수의 합인 9를 return 해야 합니다.
입출력 예 #2
- signs가 [false,false,true] 이므로, 실제 수들의 값은 각각 -1, -2, 3입니다.
- 따라서 세 수의 합인 0을 return 해야 합니다.
< 문제풀이 코드 >
< 실행결과 >
<문제 리뷰>
//어떤 정수들이 있습니다.
//이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와
//이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다.
//실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
//아래 세줄은 혼자 실험하기 위해서 넣은 것이다.
//absolutes 변수에는 지금 모두 양수가 있지만,
//signs을 확인하면 index1번에는 false 이므로
//absolutes index1번을 -7로 바꿔주고 4, -7, 12의 합을 구해야한다.
//let absolutes = [4, 7, 12];
//let signs = [true, false, true];
//solution(absolutes, signs);
//4,7,12가 담겨있는 배열 absolutes와
//true, false, true가 담겨있는 signs을 파라미터로 가져왔다.
function solution(absolutes, signs) {
//이따가 답을 solution에 리턴해주기 위해서 만들어놓음.
let answer = 0;
//내가 해야할 일은 false가 있다면 음수로 바꿔주는 것이다.
//먼저 signs배열을 훑어서 어디에 false가 있는지 찾아보자.
for (let num in signs){
//sign배열 안의 어떤 index가 false라면
//absolutes안에서 같은 index번호의 숫자를 음수로 만들어준다.
//-1를 곱하면 음수가 된다.
if (signs[num] === false) {
absolutes[num] *= -1;
}
//이제 마지막으로 abolutes안의 숫자들(4, -7, 12)을 모두 더해준다.
answer += absolutes[num];
}
//answer을 solution에 가져다준다.
//solution은 9를 받아간다.
return answer;
}
다른 사람들은 어떻게 풀었을까?
https://programmers.co.kr/learn/courses/30/lessons/76501/solution_groups?language=javascript
더 알아보아야할 것
: reduce 메소드
: 삼항연산자
* 그 외 : 음수로 받아도 무조건 양수로 바꿔서 합치기
처음에 문제를 잘못이해해서 음수로 받아도 무조건 양수로 바꿔서 합치는 것으로 풀이했다. 기록용으로 남겨둔다.
// 잘못이해해서 음수로 받아도 무조건 양수로 합치게 함...
// 콘솔로 찍어본 것, 주석도 그냥 놔둔다.
let absolutes = [4, -7, 12];
let signs = [true, false, true];
let signbool = 0;
solution(absolutes, signs);
function solution(absolutes, signs) {
let answer = 0;
for (let num in absolutes){
// console.log(absolutes[num]);
signbool = Math.sign(absolutes[num]);
// console.log(signbool);
if(signbool === -1) {
absolutes[num] *= -1;
}
// console.log(absolutes[num]);
answer += absolutes[num];
}
// console.log(answer);
return answer;
}
728x90
'Algorithm' 카테고리의 다른 글
[알고리즘] #19 수박수박수박수박수박수? | 프로그래머스 (0) | 2022.01.18 |
---|---|
[알고리즘] #16 문자열 내 p와 y의 개수 | 프로그래머스 (0) | 2022.01.17 |
[알고리즘] #15 내적 | 프로그래머스 (0) | 2022.01.17 |
[알고리즘] #11 x만큼 간격이 있는 n개의 숫자 | 프로그래머스 (0) | 2022.01.15 |
[알고리즘] #3 가운데 글자 가져오기 | 프로그래머스 (0) | 2022.01.14 |