본문 바로가기
알고리즘/백준 문제풀이

백준 [java 자바] 3000번 : 직각 삼각형

by 잔디🌿 2022. 8. 10.

    이 문제는 정말 역대급으로 삽질을 했던 문제입니다. 처음에는 직각삼각형이라는 것만 보고 직각삼각형 공식을 사용하겠구나라고 생각을 했지만 아니었고 그다음에는 맞는 방향으로 갔지만 정말 아무리 생각해도 틀린 부분이 없는데 자꾸 틀렸다고 해서 정말 오랜 시간 고민했습니다. 허무하게도 cnt가 int형이라서 큰 수를 담지 못해 생긴 일이었습니다ㅜ 뭐 시간이 오래 걸리기는 했지만 중요한 교훈을 얻은 것 같아서 고마운 문제입니다.

    저의 풀이방식은 특정 x좌표의 개수와 y좌표의 개수를 저장하는 배열을 만들고 각 좌표별로 기준이 되었을 때 몇 개의 직각삼각형이 만들어질 수 있는지를 cnt에 더하는 방식으로 진행을 했습니다. 

    import java.io.*;
    import java.util.*;
    
    
    
    class Main {
    	
    	
    	
    	public static void main(String[] arg) throws IOException {
    		
    		BufferedReader br = new BufferedReader(new InputStreamReader (System.in));
    		int n = Integer.parseInt(br.readLine());
    		
    		StringTokenizer st;
    		
    	
    		long[] x = new long[100001];
    		long[] y = new long[100001];
    		int[] xx = new int[n+1];
    		int[] yy = new int[n+1];
    		
    		
    		int i;
    		int j,k;
    		
    		int a,b;
    		
    		long cnt = 0;
    		
    		for(i = 1;i<=n;i++) {
    			st = new StringTokenizer(br.readLine());
    			a = Integer.parseInt(st.nextToken());
    			b = Integer.parseInt(st.nextToken());
    			xx[i] = a;
    			yy[i] = b;
    			
    			x[a]++;
    			y[b]++;
    		}
    		
    		int o,p;
    	
    		
    		for(i = 1;i<=n;i++) {
    			o = xx[i];
    			p = yy[i];
    			cnt += (x[o]-1)*(y[p]-1);
    			
    		}
    		
    		
    		System.out.println(cnt);
    		}
    	 
    }

    실수 1. 직각삼각형의 공식을 쓰려고 굉장히 복잡한 코드를 작성했다(심지어 맞는 코드도 아니었다)

    실수 2. int형을 벗어날 수 있는 변수였는데 int로 선언해서 다른 값이 나왔다.

    실수 3. int형 더하기 int형인데 이 값을 long형에 넣으면 안 된다.

     

    알아야 할 점:

    조건을 중심으로 코드를 작성하자

    데이터 형을 주의하자

     

    다른 사람 코드와 다른 점: 없다(다른 사람 코드가 거의 없었다)