베오
DCode
베오
전체 방문자
오늘
어제
  • 분류 전체보기 (218)
    • 공지사항 (1)
    • 잡설 (1)
    • Programming (33)
      • [C] (1)
      • [Java] (4)
      • [Python] (2)
      • [Android] (2)
      • [Network] (0)
      • [Operation System] (2)
      • [Spring Boot] (22)
      • [Docker] (0)
    • Algorithm (31)
      • 자료구조 (2)
      • 알고리즘 (Java) (14)
      • 알고리즘 (기초) (15)
    • Coding Test (131)
      • BOJ (131)
      • Algospat (0)
    • 이론적인거 (14)
      • 보안 (5)
      • 오류 해결 (2)
      • 디자인 패턴 (5)
      • 네트워크 (1)
      • 기타 (1)
    • 최신기술 (4)
      • 블록체인 (1)
    • [Project] (1)

블로그 메뉴

  • 🐈‍⬛ GitHub
  • 📫 방명록
  • 🔖 태그

공지사항

인기 글

티스토리

hELLO · Designed By 정상우.
베오

DCode

Coding Test/BOJ

[BOJ/JAVA] 2064번: IP 주소

2022. 9. 8. 13:36

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

 

2064번: IP 주소

네트워크에 연결되어 있는 컴퓨터들은 각각 하나의 IP 주소를 갖게 된다. 그리고 이러한 IP 주소를 갖는 컴퓨터들이 여러 개 모여서 하나의 IP 네트워크를 구성하게 된다. IP 네트워크는 ‘네트워

www.acmicpc.net

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class java_2064 {

    static void printIPAddress(BufferedWriter bw, StringBuffer sb) throws IOException {
        bw.write(Integer.parseInt(sb.subSequence(0, 8).toString(), 2) + "");
        for (int i = 1; i < 4; i++) {
            bw.write("." + Integer.parseInt(sb.subSequence(i * 8, i * 8 + 8).toString(), 2));
        }
        bw.write("\n");
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        /*
         * 네트워크 주소 : 기본 :: IP주소 달라지기 시작했을 때 나머지 다 0으로 바꾸기
         * 네트워크 마스크 : 기본 :: 1 달라지기 시작했을 때 나머지 다 0으로 바꾸기
         */

        // 1. IP 10진수를 2진수로 바꾸기
        // System.out.printf("%032s", Integer.toBinaryString(123));

        // n개의 컴퓨터 IP 주소 입력받기
        int n = Integer.parseInt(br.readLine());

        // 4개씩 끊기
        String ipList[][] = new String[n][4];

        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine(), ".");
            for (int j = 0; j < 4; j++) {
                int ipNumber = Integer.parseInt(st.nextToken());
                int ipPadding = Integer.parseInt(Integer.toBinaryString(ipNumber));
                ipList[i][j] = String.format("%08d", ipPadding);
            }
        }

        // for (int i = 0; i < n; i++) {
        // for (int j = 0; j < 4; j++) {
        // System.out.print(ipList[i][j] + ".");
        // }
        // System.out.println();
        // }

        StringBuffer networkAddress = new StringBuffer();
        StringBuffer networkMask = new StringBuffer();

        boolean isDone = false;
        // 비트 단위로 돌면서 언제 달라지는지 체크
        for (int i = 0; i < 4; i++) {
            // 8비트 씩
            for (int j = 0; j < 8; j++) {
                char bit = ipList[0][i].charAt(j);
                for (int k = 1; k < n; k++) {
                    char targetBit = ipList[k][i].charAt(j);
                    // 비트가 다르다면... 종료
                    if (bit != targetBit) {
                        isDone = true;
                        break;
                    }
                }
                if (isDone) {
                    break;
                } else {
                    networkAddress.append(bit + "");
                    networkMask.append("1");
                }
            }
            if (isDone) {
                break;
            }
        }

        // 나머지 비트 채우기
        for (int i = networkAddress.length() - 1; i < 32; i++) {
            networkAddress.append("0");
            networkMask.append("0");
        }

        // 네트워크 주소 출력
        printIPAddress(bw, networkAddress);

        // 네트워크 마스크 출력
        printIPAddress(bw, networkMask);

        // System.out.println(networkAddress.toString());

        br.close();
        bw.close();
    }
}
저작자표시 (새창열림)

'Coding Test > BOJ' 카테고리의 다른 글

[BOJ/JAVA] 1287번: 할 수 있다  (0) 2022.09.08
[BOJ/JAVA] 11866번: 요세푸스 문제 0  (0) 2022.09.08
[BOJ/JAVA] 1715번: 카드 정렬하기  (0) 2022.08.27
[BOJ/JAVA] 15903 카드합체 놀이  (0) 2022.08.27
[BOJ/JAVA] 1016번: 제곱 ㄴㄴ 수  (0) 2022.08.23
    'Coding Test/BOJ' 카테고리의 다른 글
    • [BOJ/JAVA] 1287번: 할 수 있다
    • [BOJ/JAVA] 11866번: 요세푸스 문제 0
    • [BOJ/JAVA] 1715번: 카드 정렬하기
    • [BOJ/JAVA] 15903 카드합체 놀이
    베오
    베오

    티스토리툴바