BOJ

[JAVA]백준 2064번 - IP주소

yujinkimkim 2023. 7. 11. 02:54

2064번: IP 주소 (acmicpc.net)

 

2064번: IP 주소

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

www.acmicpc.net

 

일단 오류 진짜 가득한 코드인데 일단 올려요 기록용으로 ㅠㅠ

package baekjoon;
import java.util.*;
import java.io.*;

public class b2046 {
	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int n = Integer.parseInt(br.readLine());
		String a;
		StringBuilder temp = new StringBuilder();
        
        for (int i = 0; i < n; i++) {
            //temp.setLength(0);  // StringBuilder 객체 초기화
			a = toStringbinary(br.readLine().split("\\."));
			for(int j = 0 ; j < 32 ; j++)
			{
				if (temp.length() <= j || temp.charAt(j) == ' ') 
				{
                    temp.append(a.charAt(j));
                } 
				else if (temp.charAt(j) != a.charAt(j)) 
				{
                    temp.setCharAt(j, '0');
                }
			}
		}
        
        String b = "";
        for(int i = 31 ; i >= 0 ; i--)
        {
        	if(temp.charAt(i) != '0')
        	{
        		for(int j = 0 ; j <= i + 1 ; j++)
        		{
        			b += "1";
        		}
        		for(int j = 0 ; j < 32 - i ; j++)
        		{
        			b += "0";
        		}
        		break;
        	}
        }

        a = "";
        for (int i = 0; i < 32; i += 8) {
            a += Integer.parseInt(temp.substring(i, i + 8), 2);
            if(i < 24)	
            	a += ".";
            
        }

        bw.write(a+"\n");
        a = "";
        for (int i = 0; i < 32; i += 8) {
            a += Integer.parseInt(b.substring(i, i + 8), 2);
            if(i < 24)	
            	a += ".";
        }
    
		
        bw.write(a);
        bw.close();
		
	}
	public static String toStringbinary(String list[])
	{
		String a = "";
		
		for(int i = 0 ; i < 4 ; i++)
		{
			int n = Integer.parseInt(list[i]);
			String temp = Integer.toBinaryString(n);
			if(temp.length() < 8)
			{
				for(int j = 0 ; j < 8 - temp.length() ;j++)
					a += "0";
			}
			a += temp;
		}
		return a;
	}
}

진짜 생각나는대로 계속 수정하면서 쓴 코드로 너무 뒤죽박죽인데 예제코드는 돌아가는데

질문게시판에 있는 것들도 안 돌아가고 애초에 오류나서 채점도 안되네요...

일단 알아낸 점

Integer.parseInt(String, 2)하면 2진수가 10진수 되는거

Integer.toBinaryString()하면 10진수가 2진수 되는

더하기 할 때 자동으로 더해질 변수 자료형으로 더해지는 애 형변환 돼서 더해지는거

스트링버퍼로 할 때 초기화 setLength(0)로 하는거

스트링버퍼에 setCharAt()있는거

split() 할 때 . 기준으로 하고 싶으면 \\. 으로 해야하는거

 

 

[알고리즘 문제풀이] 백준 2064 IP주소 (JAVA) (tistory.com)

 

[알고리즘 문제풀이] 백준 2064 IP주소 (JAVA)

https://www.acmicpc.net/problem/2064 2064번: IP 주소 네트워크에 연결되어 있는 컴퓨터들은 각각 하나의 IP 주소를 갖게 된다. 그리고 이러한 IP 주소를 갖는 컴퓨터들이 여러 개 모여서 하나의 IP 네트워크

cano721.tistory.com

도저히 안되겠어서 구글링했는데 저는 아예 접근이 잘못됐었네요

이 선생님이 설명 장난아니십니다

코드를 봐도 이해가 조금 안돼서 일단 올리고서 공부하겠슴니다