2026.04.05 일

권순찬·2026년 4월 5일

천천히 꾸준히

목록 보기
32/50

오늘의 문제!

blobblush_24500

import java.io.*;

public class blobblush_24500 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        long n = Long.parseLong(br.readLine());
        long temp = n;
        long length = 0;

        while (temp > 0) {
            temp = temp >> 1;
            length++;
        }

        long maxN = (1L << length) - 1;

        if (n == maxN) {
            bw.write("1\n");
            bw.write(n + "");
        } else {
            bw.write("2\n");
            bw.write((maxN - n) + "\n");
            bw.write(n + "");
        }
        bw.flush();
        bw.close();
    }
}

xor을 해서 최대가 되는 수들을 구하면 되는 문제.
자릿수에 따라 알아서 1로 가득차는 애들(1, 11, 111, 1111 ...)은 1개. 자기자신을 출력하고
그게 아니라면 0인 자릿수만 1로 채워주면 되니까 채워주는 수까지 최대 2개면 충분하다.
그 채워주는 수 구하는법은 어차피 2개 더해서 최댓값인 1111...를 만드는거니까 최댓값에서 주어진 N을 빼는 방식으로 가면 된다. 굿!

profile
아직 많이 서툰 개발자

0개의 댓글