티스토리 뷰

algo/백준

[백준] 18868_멀티버스 (JAVA)

이숨니 2022. 11. 2. 20:41

1. 문제

https://www.acmicpc.net/problem/18868

 

18868번: 멀티버스 Ⅰ

M개의 우주가 있고, 각 우주에는 1부터 N까지 번호가 매겨진 행성이 N개 있다. 행성의 크기를 알고 있을때, 균등한 우주의 쌍이 몇 개인지 구해보려고 한다. 구성이 같은데 순서만 다른 우주의 쌍

www.acmicpc.net


 

2. 문제 풀이 겸 회고

살다 살다 열받아서 블로그에 글 쓰는 건 처음이네...

겨우 브론즈 1 짜리한테 6/7 이 틀렸읍니다. 그것도 입구 컷 ㅋㅋ  

알고리즘 유형은 딱보면 브루스포스나 nCr로 풀어도 될 것 같았다. 

nCr은 하도 많이 풀어서 오랜만에 브루스포스로 for문 구현 열나게 해 보자 했는데 ㅋㅋㅋㅋㅋ

난독증 덕에 빨간 글씨만... (주륵..)

구성이 같은데 순서만 다른 우주의 쌍은 한 번만 센다.


저 말은 그냥 1번 우주, 2번 우주, 3번 우주 4번 우주 있다고 가정하면

{1번 우주, 2번 우주} != {2번 우주, 1번우주} 이말임..

즉, {1번 우주, 2번 우주}를 했으면 {2번우주, 1번우주}를 하면 안됨....... 

저 문장만 이해 잘했어도... 난 방문 체크며 뭐며 혼자 북 치고 장구침 ㅋㅋ

브론즈는 브론즈답게.. 그리고 브론즈라도 이해 안 되면 문제 5번씩 읽자.. 수만아... ㅋㅋ..

 

 

3. 코드

package net.acmicpc.daily.test221102;

import java.io.*;
import java.util.*;

public class Solution_18868_멀티버스 {

	static int[][] bus;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int M = Integer.parseInt(st.nextToken());
		int N = Integer.parseInt(st.nextToken());

		bus = new int[M][N];

		for (int i = 0; i < M; i++) {
			st = new StringTokenizer(br.readLine());
			for (int j = 0; j < N; j++) {
				bus[i][j] = Integer.parseInt(st.nextToken());
			}
		}

		int cnt = 0;
		for (int k = 0; k < M - 1; k++) {
			a:for (int i = k + 1; i < M; i++) {

				 for (int r = 0; r < N - 1; r++) {
					for (int c = r + 1; c < N; c++) {
						if (!check(k, i, r, c)) {
							continue a;
						}
					}
				}
			cnt++;

			}
		}
		System.out.println(cnt);

	}

	private static boolean check(int k, int i, int r, int c) {
		return (bus[k][r] == bus[k][c] && bus[i][r] == bus[i][c]) || (bus[k][r] > bus[k][c] && bus[i][r] > bus[i][c])
				|| (bus[k][r] < bus[k][c] && bus[i][r] < bus[i][c]);
	}
}

 

 

피드백은 언제나 환영입니다 :) 🌳

댓글