프로그래머스 : JavaScript 알고리즘 100일 챌린지 10일차
- 프로그래머스 : https://school.programmers.co.kr/learn/challenges/training?order=acceptance_desc
- 유트브 참고 : https://www.youtube.com/watch?v=RMmOU2u-_as&list=PLkfUwwo13dlWZxOdbvMhkzhAowaiEjuGS
코딩테스트 입문 Day10
1. 점의 위치 구하기 : 사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다. x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.
function solution(dot) {
var answer = 0;
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
dot | result |
[2, 4] | 1 |
[-7, 9] | 2 |
답 확인하기
function solution(dot) {
const x = dot[0];
const y = dot[1];
if(x > 0 && y > 0){
return 1;
}
if(x < 0 && y > 0){
return 2;
}
if(x < 0 && y < 0){
return 3;
}
if(x > 0 && y < 0){
return 4;
}
}
해설 확인하기
주어진 코드는 solution이라는 함수를 정의하고, 해당 함수는 주어진 좌표(dot)가 속하는 사분면을 판별하여 반환합니다.
함수의 동작을 요약하면 다음과 같습니다:
solution 함수를 호출할 때, 좌표를 나타내는 배열을 인자로 전달해야 합니다.
dot 배열에서 첫 번째 원소를 x 변수에, 두 번째 원소를 y 변수에 할당합니다.
조건문을 사용하여 좌표가 속하는 사분면을 판별합니다.
만약 x가 양수이고 y가 양수인 경우, 사분면 1에 해당하는 값인 1을 반환합니다.
만약 x가 음수이고 y가 양수인 경우, 사분면 2에 해당하는 값인 2를 반환합니다.
만약 x가 음수이고 y가 음수인 경우, 사분면 3에 해당하는 값인 3을 반환합니다.
만약 x가 양수이고 y가 음수인 경우, 사분면 4에 해당하는 값인 4를 반환합니다.
주어진 좌표가 사분면 1부터 4까지의 어느 사분면에 속하는지에 따라 해당하는 값을 반환합니다.
예를 들어, solution([3, 4])를 호출하면 반환 값으로 1이 나올 것입니다. 주어진 좌표 (3, 4)는 사분면 1에 속합니다.
2. 2차원으로 만들기 : 정수 배열 num_list와 정수 n이 매개변수로 주어집니다. num_list를 다음 설명과 같이 2차원 배열로 바꿔 return하도록 solution 함수를 완성해주세요. num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 num_list를 2 * 4 배열로 다음과 같이 변경합니다. 2차원으로 바꿀 때에는 num_list의 원소들을 앞에서부터 n개씩 나눠 2차원 배열로 변경합니다.
function solution(num_list, n) {
var answer = [[]];
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
num_list | n | result |
[1, 2, 3, 4, 5, 6, 7, 8] | 2 | [[1, 2], [3, 4], [5, 6], [7, 8]] |
[100, 95, 2, 4, 5, 6, 18, 33, 948] | 3 | [[100, 95, 2], [4, 5, 6], [18, 33, 948]] |
답 확인하기
function solution(num_list, n) {
const result = [];
let newArray = [];
for(let i=0; i<num_list.length; i++){
const item = num_list[i];
newArray.push(item);
if(newArray.length === n){
result.push(newArray);
newArray = [];
}
}
return result;
}
해설 확인하기
주어진 코드는 solution이라는 함수를 정의하고, 해당 함수는 주어진 숫자 리스트(num_list)를 길이가 n인 하위 배열로 나눈 결과를 반환합니다.
함수의 동작을 요약하면 다음과 같습니다:
solution 함수를 호출할 때, 숫자 리스트와 나눌 길이를 나타내는 숫자를 인자로 전달해야 합니다.
result라는 빈 배열을 생성합니다. 결과를 저장할 변수입니다.
newArray라는 빈 배열을 생성합니다. 하위 배열을 임시로 저장할 변수입니다.
for 루프를 사용하여 num_list의 각 숫자에 대해 반복합니다.
현재 숫자를 item 변수에 저장합니다.
newArray에 item을 추가합니다.
만약 newArray의 길이가 n과 같다면, result에 newArray를 추가하고 newArray를 빈 배열로 초기화합니다.
최종적으로 result 배열을 반환합니다.
예를 들어, solution([1, 2, 3, 4, 5, 6], 2)를 호출하면 반환 값으로 [[1, 2], [3, 4], [5, 6]]가 나올 것입니다. 주어진 숫자 리스트 [1, 2, 3, 4, 5, 6]를 길이가 2인 하위 배열로 나눈 결과입니다. 각 하위 배열은 [1, 2], [3, 4], [5, 6]입니다.
3. 공 던지기 : 머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.
function solution(numbers, k) {
var answer = 0;
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
numbers | k | result |
[1, 2, 3, 4] | 2 | 3 |
[1, 2, 3, 4, 5, 6] | 5 | 3 |
[1, 2, 3] | 3 | 2 |
답 확인하기
function solution(numbers, k) {
let cnt = 1;
for(let i=0; ; i+=2){
i %= numbers.length;
const item = numbers[i];
if(cnt === k){
return item;
}
cnt++;
}
}
// 일부 프로그래밍 언어에서는 for문의 반복 조건식에서 길이를 생략할 수 있습니다. 일반적으로 이러한 경우 반복 대상에 대한 조건식이 사용되며, 조건식이 참인 동안 반복이 계속됩니다.
해설 확인하기
주어진 코드는 solution이라는 함수를 정의하고, 해당 함수는 주어진 숫자 배열(numbers)에서 인덱스를 건너뛰면서 k번째 숫자를 반환합니다.
함수의 동작을 요약하면 다음과 같습니다:
solution 함수를 호출할 때, 숫자 배열과 건너뛸 횟수를 나타내는 숫자를 인자로 전달해야 합니다.
cnt라는 변수를 1로 초기화합니다. 현재 건너뛴 숫자의 개수를 나타냅니다.
무한루프를 돌면서 숫자 배열을 탐색합니다.
i를 숫자 배열의 길이로 나눈 나머지를 구합니다. 이는 인덱스를 순환시키기 위한 작업입니다.
numbers 배열에서 i번째 숫자를 가져옵니다.
만약 cnt가 k와 같다면, 현재 숫자를 반환합니다.
cnt를 증가시킵니다.
따라서, numbers 배열에서 인덱스를 건너뛰면서 k번째 숫자를 찾아 반환하는 함수입니다.
예를 들어, solution([1, 2, 3, 4, 5, 6], 3)를 호출하면 반환 값으로 3이 나올 것입니다. 주어진 숫자 배열 [1, 2, 3, 4, 5, 6]에서 인덱스를 건너뛰면서 세 번째 숫자인 3을 반환합니다.
4. 배열 회전시키기 : 정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.
function solution(numbers, direction) {
var answer = [];
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
numbers | direction | result |
[1, 2, 3] | "right" | [3, 1, 2] |
[4, 455, 6, 4, -1, 45, 6] | "left" | [455, 6, 4, -1, 45, 6, 4] |
답 확인하기
function solution(numbers, direction) {
if(direction === "right"){
const lastItem = numbers.pop();
numbers.unshift(lastItem);
} else {
const firstItem = numbers.shift();
numbers.push(firstItem);
}
return numbers;
}
// function solution(numbers, direction) {
// const answer = [];
// if(direction === "right"){
// answer.push(numbers[numbers.length - 1]);
// for(let i=0; i<numbers.length - 1; i++){
// answer.push(numbers[i]);
// }
// } else {
// for(let i=1; i<numbers.length; i++){
// answer.push(numbers[i]);
// }
// answer.push(numbers[0]);
// }
// return answer;
// }
해설 확인하기
주어진 코드는 solution 함수를 정의하고, 해당 함수는 숫자 배열(numbers)을 주어진 방향(direction)으로 회전시키는 기능을 구현합니다.
함수의 동작은 다음과 같습니다:
direction이 "right"인 경우:
numbers 배열에서 마지막 요소를 pop() 메서드를 사용하여 제거합니다.
unshift() 메서드를 사용하여 마지막 요소를 배열의 맨 앞에 추가합니다.
그렇지 않은 경우 (즉, direction이 "left"인 경우):
numbers 배열에서 첫 번째 요소를 shift() 메서드를 사용하여 제거합니다.
push() 메서드를 사용하여 첫 번째 요소를 배열의 맨 뒤에 추가합니다.
최종적으로 조작된 numbers 배열이 반환됩니다.
예를 들어, solution([1, 2, 3, 4, 5], "right")를 호출하면 반환 값으로 [5, 1, 2, 3, 4]가 나옵니다. 주어진 숫자 배열을 오른쪽으로 회전시킨 결과입니다.
반대로, solution([1, 2, 3, 4, 5], "left")를 호출하면 반환 값으로 [2, 3, 4, 5, 1]가 나옵니다. 주어진 숫자 배열을 왼쪽으로 회전시킨 결과입니다.