Day 9
개미 군단
https://school.programmers.co.kr/learn/courses/30/lessons/120837
function solution(hp) {
// 장군개미 = 5, 병정개미 = 3, 일개미 = 1
// hp가 0이라면
if(hp === 0) {
return 0;
}
// hp가 1이거나 3이라면
if(hp === 1 || hp === 3) {
return 1;
}
// hp가 2이거나 4라면
if(hp === 2 || hp === 4) {
return 2;
}
// hp가 5 이상이라면
if(hp >= 5) {
// hp를 5로 나눈 몫
let quotient = parseInt(hp / 5);
// hp를 5로 나눈 나머지
let remainder = hp % 5;
// 나머지가 0이라면 몫을 return
if(remainder === 0) {
return quotient;
}
// 나머지가 1 혹은 3이라면
else if(remainder === 1 || remainder === 3) {
return quotient + 1;
}
// 나머지가 2 혹은 4라면
else {
return quotient + 2;
}
}
}
밑의 코드처럼 간결하게 풀 수도 있다.
function solution(hp) {
return Math.floor(hp/5)+Math.floor((hp%5)/3)+(hp%5)%3;
}
모스부호(1)
https://school.programmers.co.kr/learn/courses/30/lessons/120838
function solution(letter) {
let morse = {a: ".-",
b:"-...",
c:"-.-.",
d:"-..",
e:".",
f:"..-.",
g:"--.",
h:"....",
i:"..",
j:".---",
k:"-.-",
l:".-..",
m:"--",
n:"-.",
o:"---",
p:".--.",
q:"--.-",
r:".-.",
s:"...",
t:"-",
u:"..-",
v:"...-",
w:".--",
x:"-..-",
y:"-.--",
z:"--.."}
// 공백을 기준으로 나눠서 arr 배열에 저장
let arr = letter.split(' ');
// answer 문자열 생성
let answer = '';
// arr[i]와 일치하는 morse 배열의 value가 있는지 확인하고
// 그 value의 key 값을 answer 문자열에 더해준다.
for(let i = 0; i < arr.length; i++) {
answer += Object.keys(morse).find(key => morse[key] === arr[i]);
}
return answer;
}
다른 사람이 푼 간결한 풀이
morse = {
'.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
'--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
'--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
'...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
'-.--':'y','--..':'z'
}
function solution(letter) {
return letter.split(' ').reduce((prev, curr) => prev + morse[curr], '')
}
- function solution(letter) : **solution**이라는 이름의 함수를 정의하며, 매개변수 **letter**를 받습니다.
- letter.split(' ') : 문자열 **letter**를 공백을 기준으로 나눕니다. 이렇게 나눠진 부분은 배열의 요소가 됩니다. 예를 들어, "HELLO WORLD"라는 문자열이 입력되면 배열은 **['HELLO', 'WORLD']**가 됩니다.
- .reduce((prev, curr) => prev + morse[curr], '') : 배열을 reduce 메소드를 사용하여 하나의 값으로 축소합니다. **prev**는 누적된 값, **curr**은 현재 배열의 요소입니다.
- morse[curr] : morse 객체에서 현재 알파벳(curr)에 해당하는 Morse 코드 값을 가져옵니다. **curr**은 배열의 각 요소인 단어(예: 'HELLO')입니다.
- prev + morse[curr] : 이전까지 누적된 값(prev)에 현재 알파벳(curr)에 대응하는 Morse 코드를 더합니다.
- 최종적으로 reduce 메소드가 끝난 후, Morse 코드로 변환된 문자열이 반환됩니다.
가위바위보
https://school.programmers.co.kr/learn/courses/30/lessons/120839
function solution(rsp) {
// 가위 = 2, 바위 = 0, 보 = 5
let answer = '';
for(let i = 0; i < rsp.length; i++) {
// 바위일 때
if(rsp[i] === '0'){
answer += '5';
}
// 가위일 때
else if(rsp[i] === '2'){
answer += '0';
}
// 보일 때
else if(rsp[i] === '5'){
answer += '2';
}
}
return answer;
}
아래와 같이 map과 join을 이용하면 간결하게 풀 수 있다.
function solution(rsp) {
let arr = {
2: 0,
0: 5,
5: 2
};
var answer = [...rsp].map(v => arr[v]).join("");
return answer;
}
구슬을 나누는 경우의 수
https://school.programmers.co.kr/learn/courses/30/lessons/120840
function factorial(n) {
if (n <= 1) {
return 1;
}
let result = 1;
for(let i = 1; i <= n; i++) {
result *= i;
}
return result;
}
function solution(balls, share) {
// balls: 머쓱이가 갖고 있는 구슬의 개수
// share: 친구들에게 나누어줄 구술 개수
if (balls < share) {
return 0;
}
return Math.round(factorial(balls) / ( factorial(balls-share) * factorial(share)) );
}
주의: Math.round를 쓰지 않으면 틀린다!! Math.round는 반올림을 한 정수를 반환한다.
Day 10
점의 위치 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/120841
function solution(dot) {
const x = dot[0] > 0 ? 1 : -1;
const y = dot[1] > 0 ? 1 : -1;
if(x === 1 ){
if(y === 1) {
return 1;
}
else {
return 4;
}
}
else {
if(y === 1) {
return 2;
}
else {
return 3;
}
}
}
한번 삼항연산자를 써봤다.
2차원으로 만들기
https://school.programmers.co.kr/learn/courses/30/lessons/120842#
function solution(num_list, n) {
let answer = [];
for(let i = 0; i< num_list.length;) {
let arr = [];
// arr에 n의 크기만큼 배열값을 넣어준다.
for(let j = 0; j < n; j++) {
arr[j] = num_list[i];
i++;
}
// answer 배열에 arr 배열을 push한다.
answer.push(arr);
}
return answer;
}
splice를 해결해서 풀 수도 있다.
function solution(num_list, n) {
// num_list: 입력으로 주어진 배열
// n: 묶을 원소의 개수
var answer = []; // 결과를 담을 2차원 배열
while(num_list.length) {
// num_list 배열이 비어있을 때까지 반복
// splice(0, n): 배열의 첫 번째 원소부터 n개의 원소를 추출하여 반환하고 원본 배열에서 삭제
// 추출한 원소들을 answer 배열에 추가
answer.push(num_list.splice(0, n));
}
return answer; // 묶어진 배열을 반환
공 던지기
https://school.programmers.co.kr/learn/courses/30/lessons/120843
생각을 조금 해봐야 했던 문제이다.
function solution(numbers, k) {
// now = 배열을 무한히 옆으로 늘려놨을 때, 몇번째 인덱스에 있는지
let now = 2 * (k-1);
// numbers[now를 배열의 길이로 나눈 나머지]가 정답
return numbers[now % numbers.length];
}
배열 회전시키기
https://school.programmers.co.kr/learn/courses/30/lessons/120844
function solution(numbers, direction) {
let answer = [];
if(direction === "left") {
let idx = 0;
// numbers의 두번째 값부터 answer에 넣어준다.
for(let i = 1; i < numbers.length; i++){
answer[idx++] = numbers[i];
}
// 마지막으로 numbers 맨 처음 값을 answer에 넣어준다.
answer[idx] = numbers[0];
}
else if(direction === "right") {
let idx2 = 0;
// 맨 처음으로 numbers 맨 마지막 값을 answer에 넣어준다.
answer[idx2++] = numbers[numbers.length -1];
// numbers의 두번째 값부터 answer에 넣어준다.
for(let i = 0; i < numbers.length - 1; i++) {
answer[idx2++] = numbers[i];
}
}
return answer;
}
'Programmers(JavaScript)' 카테고리의 다른 글
[프로그래머스 자바스크립트] '완주하지 못한 선수' 풀어보기 (0) | 2024.07.17 |
---|---|
[프로그래머스 자바스크립트] '폰켓몬' 풀어보기 (2) | 2024.07.16 |
[프로그래머스 자바스크립트] 코딩테스트 입문 Day 8 풀어보기 (0) | 2024.02.13 |
[프로그래머스 자바스크립트] 코딩테스트 입문 Day 6,7 풀어보기 (1) | 2024.02.13 |
[프로그래머스 자바스크립트] 코딩테스트 입문 Day 4,5 풀어보기 (1) | 2024.02.10 |