| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 17626번
- 16439번
- 2422번
- 자바스크립트
- 타입스크립트 프로그래밍
- 풀이
- 1541번
- javascript
- 20300번
- 정리
- 13913번
- 1969번
- 6593번
- 알고리즘
- 2503번
- node.js
- 123만들기
- 토마토
- 16953번
- 맥주마시면서걸어가기
- 5427번
- 14940번
- 5014번
- 7526번
- 1926번
- 나이트의이동
- 타입스크립트
- 백준
- 20365번
- 한윤정이 이탈리아에 가서 아이스크림을 사먹는데
Archives
- Today
- Total
Sqsung DevLog
[백준] 2422번: 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 - Node.js (자바스크립트) 본문
1. 문제 ㅡ 2422번: 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (난이도: Silver IV)
2422번: 한윤정이 이탈리아에 가서 아이스크림을 사먹는데
첫째 줄에 정수 N과 M이 주어진다. N은 아이스크림 종류의 수이고, M은 섞어먹으면 안 되는 조합의 개수이다. 아래 M개의 줄에는 섞어먹으면 안 되는 조합의 번호가 주어진다. 같은 조합은 두 번
www.acmicpc.net
2. 풀이 ㅡ Node.js (자바스크립트)
const [info, ...input] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const [iceCreamCount, mismatchCount] = info.split(' ').map(val => +val);
const solution = () => {
let combinations = 0;
/**
* @mismatches = 섞어먹으면 안되는 아이스크림 조합을 저장해둘 2차원 배열
* 섞어먹으면 안되는 조합은 true, 섞어도 되는 조합은 false 값을 가지고 있음
*/
const mismatches = Array.from({ length: iceCreamCount + 1 }).map(_ =>
Array.from({ length: iceCreamCount + 1 }, () => false)
);
for (let i = 0; i < mismatchCount; i++) {
const [a, b] = input
.shift()
.split(' ')
.map(val => +val);
mismatches[a][b] = true;
mismatches[b][a] = true;
}
/**
* 반복문을 돌면서 현재의 조합이 섞으면 안되는 조합인 경우는 바로 continue 처리 해준다
* 3 번째 for문에서는 [j][k] 조합과 [i][k] 조합 둘 다 확인해줘야 한다
*/
for (let i = 1; i <= iceCreamCount; i++) {
for (let j = i + 1; j <= iceCreamCount; j++) {
if (mismatches[i][j]) continue;
for (let k = j + 1; k <= iceCreamCount; k++) {
if (mismatches[j][k] || mismatches[i][k]) continue;
combinations += 1;
}
}
}
return combinations;
};
console.log(solution());
2-1. 풀이 설명
- 2차원 배열(mismatches)에 섞으면 안되는 조합들을 저장해뒀다. mismatches 배열에 들어있는 값은 모두 false로 초기화 되지만, 추후 for문을 돌면서 섞으면 안되는 조합에 해당하는 인덱스에 위치한 값들은 true로 변경해줬다. (예: 섞으면 안되는 조합이 '1 3'인 경우, mismatches[1][3] = true, mismatches[3][1] = true로 변경)
- 이후 3중 반복문을 돌면서 아이스크림 i, j, k의 조합을 모두 확인했다. 반복문 중간중간 i와 j, j와 k, 그리고 i와 k의 조합이 mismatches 배열에 섞이면 안되는 조합으로 지정되어 있는 경우 continue처리 해줬다. (안해주면 시간 초과)
'Algorithm' 카테고리의 다른 글
| [백준] 20115번: 에너지 드링크 - Node.js (자바스크립트) (0) | 2023.06.13 |
|---|---|
| [백준] 20300번: 서강근육맨 - Node.js (자바스크립트) (0) | 2023.06.09 |
| [백준] 16439번: 치킨치킨치킨 - Node.js (자바스크립트) (2) | 2023.06.06 |
| [백준] 9095번: 1, 2, 3 만들기 - Node.js (자바스크립트) (0) | 2023.06.05 |
| [백준] 1463번: 1로 만들기 - Node.js (자바스크립트) (0) | 2023.06.05 |