JavaScript

[구름톤 챌린지] 1주차_완벽한 햄버거 만들기

김꼬알 2023. 8. 18. 12:35

 

필요한 개념


  • 정렬
  • loop vs reduce

 

 

문제 분석


햄버거를 구성하는 N개의 재료가 순서대로 주어졌을 때, 조건대로 정렬되어 있는지 확인하는 문제이다.

이때 정렬의 조건은 가장 높은 정수를 기준으로, 왼쪽이나 오른쪽으로 갈 수록 정수의 값이 같거나 감소되어야 한다.

문제를 해결하기 위해서는 주어진 값 중 가장 큰 값의 위치를 찾아야 한다.

그 다음에는 큰 값의 위치를 기준으로 앞의 값들은 오름차순으로 배열되어 있는지, 뒤의 값들은 내림차순으로 배열되어 있는지 확인하면 된다.

이 값이 문제가 없다면 완벽한 햄버거이고, 아니라면 완벽한 햄버거가 아니다.

 

 

데이터 입력 받기


const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let input = [];
rl.on('line', (line) => {
	input.push(line.trim());
	if (input.length === 2){
		rl.close();
	}
})

 

 

가장 큰 값 찾기


데이터 입력을 받은 뒤, 변수를 정리한다.

// 모든 데이터는 input에 저장
rl.on('close', () => {
	let n = Number(input[0]);
	let arr = input[1].split(' ').map(Number);
});

 

배열에서 가장 큰 정수를 찾고, 그 위치를 기준으로 배열을 분리한다.

rl.on('close', () => {
	..code
	let chk = arr.indexOf(Math.max(...arr));
	let left = arr.slice(0, chk);
	let right = arr.slice(chk);
});

 

 

정렬하기


chk를 기준으로 나누어진 left와 right 배열을 각각 오름차순, 내림차순으로 정렬한다.

rl.on('close', () => {
	..code
	left.sort();
	right.sort((a, b) => b - a);
	// 2개의 배열을 합할 때는 [...arr1, ...arr2] 를 사용하면 편하다.
	let sortedArr = [...left, ...right];
});

 

 

배열 비교하기


두개의 배열을 비교하는 방법은 두가지가 있다.

JSON을 사용하면 간결하지만, 크기가 큰 배열에서는 반복문으로 직접 구현하는 것이 더 효율적이다.

 

1. JSON 사용하기

if (JSON.stringify(arr1) === JSON.stringify(arr2) ){
	console.log("2개의 배열은 같다.");
} else{
	console.log("2개의 배열은 다르다.")
}

 

2. 반복문으로 비교하기

function arraysAreEqual(array1, array2) {
	//배열의 길이나 요소가 다르다면 다른 배열이다.
	if (array1.length !== array2.length) {
		return false;
	}
	for (let i = 0; i < array1.length; i++) {
		if (array1[i] !== array2[i]) {
			return false;
		}
	}
	return true;
}

 

 

reduce vs loop


배열을 비교해서 올바른 햄버러가면, 배열에 있는 모든 값을 더해 출력한다.

 

reduce 사용하기

// a = 축적값, b = 리스트의 값, 0 => 축적값의 초기값
// reduce((축적값, 다음 요소) => 처리할 코드, 축적 값의 초기값)
arr.reduce((a, b) => a + b, 0);

 

loop 사용하기

let sum = 0;
for(let i = 0; i < arr.length; i++) {
	sum += arr[i];
}

 

 

처음에 배열을 나눌 생각을 못하고 배열 요소들의 차이가 같은지를 비교하려고 해서 문제가 풀리지 않았다.

왜 그런지 다시 문제를 보니 이해를 잘 못하고 있어서 그런 거였다.

그래서 결국 풀긴 했지만 시간이 너무 오래 걸렸다.

아직 생각하고 구현해내는 연습이 덜 된 것 같아서 구름톤 챌린지를 하면서 계속 연습을 해야겠다.