프로그래머스 : JavaScript 알고리즘 100일 챌린지 49일차
- 프로그래머스 : https://school.programmers.co.kr/learn/challenges/training?order=acceptance_desc
- 유트브 참고 : https://www.youtube.com/watch?v=RMmOU2u-_as&list=PLkfUwwo13dlWZxOdbvMhkzhAowaiEjuGS
코딩 기초 트레이닝 Day49
1. 커피 심부름 : 팀의 막내인 철수는 아메리카노와 카페 라테만 판매하는 카페에서 팀원들의 커피를 사려고 합니다. 아메리카노와 카페 라테의 가격은 차가운 것과 뜨거운 것 상관없이 각각 4500, 5000원입니다. 각 팀원에게 마실 메뉴를 적어달라고 하였고, 그 중에서 메뉴만 적은 팀원의 것은 차가운 것으로 통일하고 "아무거나"를 적은 팀원의 것은 차가운 아메리카노로 통일하기로 하였습니다. 각 직원이 적은 메뉴가 문자열 배열 order로 주어질 때, 카페에서 결제하게 될 금액을 return 하는 solution 함수를 작성해주세요. order의 원소는 아래의 것들만 들어오고, 각각의 의미는 다음과 같습니다.
order의 원소 | 의미 |
"iceamericano", "americanoice" | 차가운 아메리카노 |
"hotamericano", "americanohot" | 따뜻한 아메리카노 |
"icecafelatte", "cafelatteice" | 차가운 카페 라테 |
"hotcafelatte", "cafelattehot" | 따뜻한 카페 라테 |
"americano" | 아메리카노 |
"cafelatte" | 카페 라테 |
"anything" | 아무거나 |
function solution(order) {
var answer = 0;
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
order | result |
["cafelatte", "americanoice", "hotcafelatte", "anything"] | 19000 |
["americanoice", "americano", "iceamericano"] | 13500 |
답 확인하기
function solution(order) {
let answer = 0;
for (let i = 0; i < order.length; i++) {
if (order[i].includes("cafelatte")) {
answer += 5000;
} else {
answer += 4500;
}
}
return answer;
}
해설 확인하기
함수는 order 배열에 있는 문자열들을 순회하면서 "cafelatte"를 포함하는지 여부에 따라 금액을 계산하는 JavaScript 함수입니다.
함수의 동작은 다음과 같습니다:
order 배열을 반복하면서 각 요소를 확인합니다.
현재 요소가 "cafelatte"를 포함하는지 여부를 includes() 메서드를 사용하여 확인합니다. 만약 포함한다면 5000을 추가합니다.
"cafelatte"를 포함하지 않는 경우, 4500을 추가합니다.
반복이 완료된 후, 최종 금액인 answer 값을 반환합니다.
이 함수는 order 배열에 있는 문자열 중 "cafelatte"를 포함하는 경우 5000을 더하고, 그렇지 않으면 4500을 더한 최종 금액을 반환합니다.
2. 그림 확대 : 직사각형 형태의 그림 파일이 있고, 이 그림 파일은 1 × 1 크기의 정사각형 크기의 픽셀로 이루어져 있습니다. 이 그림 파일을 나타낸 문자열 배열 picture과 정수 k가 매개변수로 주어질 때, 이 그림 파일을 가로 세로로 k배 늘린 그림 파일을 나타내도록 문자열 배열을 return 하는 solution 함수를 작성해 주세요.
function solution(picture, k) {
var answer = [];
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
pictur | k | result |
[".xx...xx.", "x..x.x..x", "x...x...x", ".x.....x.", "..x...x..", "...x.x...", "....x...."] | 2 | ["..xxxx......xxxx..", "..xxxx......xxxx..", "xx....xx..xx....xx", "xx....xx..xx....xx", "xx......xx......xx", "xx......xx......xx", "..xx..........xx..", "..xx..........xx..", "....xx......xx....", "....xx......xx....", "......xx..xx......", "......xx..xx......", "........xx........", "........xx........"] |
["x.x", ".x.", "x.x"] | 3 | ["xxx...xxx", "xxx...xxx", "xxx...xxx", "...xxx...", "...xxx...", "...xxx...", "xxx...xxx", "xxx...xxx", "xxx...xxx"] |
답 확인하기
function solution(picture, k) {
let answer = [];
for (let row of picture) {
let resized = '';
for (let pixel of row) {
resized += pixel.repeat(k);
}
for (let i = 0; i < k; i++) {
answer.push(resized);
}
}
return answer;
}
해설 확인하기
함수는 주어진 picture 배열과 정수 k를 이용하여 이미지를 확대하는 JavaScript 함수입니다.
함수의 동작은 다음과 같습니다:
picture 배열을 반복하면서 각 줄(row)을 가져옵니다.
빈 문자열 resized를 생성합니다.
각 픽셀(pixel)을 반복하면서 k번 반복하여 resized에 추가합니다.
k번 반복하여 resized를 answer 배열에 추가합니다.
모든 줄에 대해 위 과정을 반복합니다.
최종적으로 answer 배열을 반환합니다.
이 함수는 주어진 picture 배열의 각 줄을 가로로 k배 확대하고, 그 결과를 세로로 k배 확대하여 반환합니다.
3. 조검에 맞게 수열 변환하기3 : 정수 배열 arr와 자연수 k가 주어집니다. 만약 k가 홀수라면 arr의 모든 원소에 k를 곱하고, k가 짝수라면 arr의 모든 원소에 k를 더합니다. 이러한 변환을 마친 후의 arr를 return 하는 solution 함수를 완성해 주세요.
function solution(arr, k) {
var answer = [];
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
arr | k | result |
[1, 2, 3, 100, 99, 98] | 3 | [3, 6, 9, 300, 297, 294] |
[1, 2, 3, 100, 99, 98] | 2 | [3, 4, 5, 102, 101, 100] |
답 확인하기
function solution(arr, k) {
var answer = [];
for(let i=0; i<arr.length; i++){
if(k % 2 == 1){
answer.push(arr[i] * k);
} else {
answer.push(arr[i] + k);
}
}
return answer;
}
해설 확인하기
코드는 arr 배열의 각 요소에 대해 조건에 따라 연산을 수행하고, 결과를 새로운 배열인 answer에 추가하여 반환하는 JavaScript 함수입니다.
함수의 동작은 다음과 같습니다:
arr 배열과 k 값을 입력으로 받습니다.
빈 배열 answer를 선언합니다.
for 루프를 사용하여 배열의 각 요소를 반복합니다.
현재 요소에 대해 k 값의 홀짝 여부를 확인합니다.
k가 홀수인 경우, 현재 요소에 k를 곱한 값을 answer 배열에 추가합니다.
k가 짝수인 경우, 현재 요소에 k를 더한 값을 answer 배열에 추가합니다.
모든 요소에 대해 위 과정을 반복합니다.
최종적으로 answer 배열을 반환합니다.
이 함수는 주어진 arr 배열의 각 요소에 대해 k를 적용하여 처리한 결과를 새로운 배열로 반환합니다.
4. l로 만들기 : 알파벳 소문자로 이루어진 문자열 myString이 주어집니다. 알파벳 순서에서 "l"보다 앞서는 모든 문자를 "l"로 바꾼 문자열을 return 하는 solution 함수를 완성해 주세요.
function solution(myString) {
var answer = '';
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
myString | result |
"abcdevwxyz" | "lllllvwxyz" |
"jjnnllkkmm" | "llnnllllmm" |
답 확인하기
function solution(myString) {
return [...myString].map(a => a.charCodeAt() < 108 ? 'l' : a).join("")
}
해설 확인하기
코드는 문자열 myString을 처리하여 새로운 문자열을 반환하는 JavaScript 함수입니다.
함수의 동작은 다음과 같습니다:
myString을 배열로 변환하고, Spread 연산자 ...를 사용하여 각 문자를 개별 요소로 만듭니다.
map() 메서드를 사용하여 배열의 각 요소에 대해 콜백 함수를 실행합니다.
콜백 함수는 해당 문자의 유니코드를 확인하고, 유니코드 값이 108보다 작은지 확인합니다.
만약 유니코드 값이 108보다 작으면 해당 문자를 'l'로 대체합니다. 그렇지 않으면 원래 문자를 그대로 사용합니다.
join() 메서드를 사용하여 배열 요소를 문자열로 결합합니다.
최종적으로 변환된 문자열을 반환합니다.
즉, 이 함수는 주어진 문자열 myString에서 각 문자의 유니코드를 확인하여 유니코드 값이 108보다 작으면 'l'로 대체하고, 그렇지 않으면 원래 문자를 유지하는 새로운 문자열을 반환합니다.
5. 특별한 이차원 배열1 : 정수 n이 매개변수로 주어질 때, 다음과 같은 n × n 크기의 이차원 배열 arr를 return 하는 solution 함수를 작성해 주세요.
- arr[i][j] (0 ≤ i, j < n)의 값은 i = j라면 1, 아니라면 0입니다.
function solution(n) {
var answer = [[]];
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
n | result |
3 | [[1, 0, 0], [0, 1, 0], [0, 0, 1]] |
6 | [[1, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 1]] |
1 | [[1]] |
답 확인하기
function solution(n) {
const arr = Array(n).fill(Array(n).fill(0))
return arr.map((a, i) => {
return a.map((b, bi) => bi === i ? 1 : b)
})
}
해설 확인하기
코드는 숫자 n을 입력으로 받아 이차원 배열을 생성하는 JavaScript 함수입니다.
함수의 동작은 다음과 같습니다:
n 크기의 배열을 생성하고, fill() 메서드를 사용하여 각 요소를 n 크기의 배열로 초기화합니다.
이차원 배열 arr을 생성합니다. 이차원 배열의 각 요소는 n 크기의 배열로 채워집니다. 이때, fill() 메서드는 동일한 배열 객체를 참조하므로 모든 요소가 동일한 배열을 가리키게 됩니다.
arr의 각 요소에 대해 map() 메서드를 사용하여 새로운 배열을 생성합니다.
내부 map()은 각 요소를 반복하면서 현재 요소의 인덱스(bi)와 외부 map()에서의 인덱스(i)를 비교합니다.
bi와 i가 동일한 경우에는 해당 요소를 1로 설정하고, 그렇지 않은 경우에는 원래 값인 0을 유지합니다.
외부 map()의 결과로 새로운 이차원 배열이 생성됩니다.
최종적으로 생성된 이차원 배열을 반환합니다.
이 함수는 n 크기의 이차원 배열을 생성하고, 대각선 요소는 1로 설정하고 나머지 요소는 0으로 설정하여 반환합니다.