여름의 대삼각형, 정사각형의 개수, 파손된 램

박상훈·2022년 4월 26일
0

여름의 대삼각형


신발끈 공식(꼭짓점 좌표로 다각형 면적 구하는 방법)으로 문제 해결

import java.io.*;
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] x = br.readLine().split(" ");
        String[] y = br.readLine().split(" ");
        String[] z = br.readLine().split(" ");

        double result = Math.abs(
                (
                    (
                            (Double.parseDouble(x[0]) * Double.parseDouble((y[1])))
                            + (Double.parseDouble(y[0]) * Double.parseDouble((z[1])))
                            + (Double.parseDouble(z[0]) * Double.parseDouble((x[1])))
                    )
                    -
                    (
                            (Double.parseDouble(z[0]) * Double.parseDouble(y[1]))
                            + (Double.parseDouble(y[0]) * Double.parseDouble(x[1]))
                            + (Double.parseDouble(x[0]) * Double.parseDouble(z[1]))
                    )
                ) / 2
        );
        System.out.printf("%.2f\n", result);
    }
}

정사각형의 개수


공식 명은 따로 모르겠다
사각형을 그리고 n 만큼의 숫자가 있을 때 어떤식으로 증가하는지 패턴을 확인해보다가
1 ~ n 만큼 각 제곱의 합이 일치하는것을 확인

import java.io.*;
class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        long input = Long.parseLong(br.readLine());
        long squareNumber = 0;
        for (long i = 1; i <= input; i++) {
            squareNumber += i * i;
        }
        System.out.println(squareNumber);
    }
}

파손된 램


2의 제곱수 검증은 &(AND 연산자) 를 이용하여 간단히 해결 가능
2 = 0010, (-1) 1 = 0001
4 = 0100, (-1) 3 = 0011
8 = 1000, (-1) 7 = 0111 ... 이 패턴을 이용하여 알고리듬 문제 해결

import java.io.*;
class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int lemNumber = Integer.parseInt(br.readLine());
        String[] memory = br.readLine().split(" ");

        int brokenNumber = 0;
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < lemNumber; i++) {
            if ((Integer.parseInt(memory[i]) & (Integer.parseInt(memory[i]) - 1)) != 0) {
                brokenNumber++;
                if (sb.length() != 0) {
                    sb.append(" ");
                }
                sb.append(i + 1);
            }
        }

        System.out.println(brokenNumber);
        if (brokenNumber != 0) {
            System.out.println(sb);
        }
    }
}
profile
엔지니어

0개의 댓글