Algorithm/백준 알고리즘

백준_3107 IPv6 (자바) / 문자열

미스터로즈 2021. 9. 26. 23:31

시간&메모리 제한

 

문제

 

입력&출력

 

문제풀이

package com.Back;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Back_3107 {

	static String [] answer = {"0000","0000","0000","0000","0000","0000","0000","0000"};
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb;
		String ip = br.readLine();
		
		String[] splits = ip.split("::");
		
		//::가 
		if(splits.length==1) {
			String[] split = splits[0].split(":");
			for (int i = 0; i < split.length; i++) {
				if(split[i].length()==4) {
					answer[i]=split[i];
				}else {
					sb = new StringBuilder();
					for (int j = 0; j < 4-split[i].length(); j++) {
						sb.append(0);
					}
					sb.append(split[i]);
					answer[i]=sb.toString();
				}
			}
		}else {
			String[] split1;
			String[] split2;
			// 앞부분 처리
			if(!splits[0].equals("")) {				
				split1 = splits[0].split(":");
				for (int i = 0; i < split1.length; i++) {
					if(split1[i].length()==4) {
						answer[i]=split1[i];
					}else {
						sb = new StringBuilder();
						for (int j = 0; j < 4-split1[i].length(); j++) {
							sb.append(0);
						}
						sb.append(split1[i]);
						answer[i]=sb.toString();
					}
				}
			}
			// 뒷부분 처리
			if(!splits[1].equals("")) {
				split2 = splits[1].split(":");
				for (int i = 0; i < split2.length; i++) {
					if(split2[i].length()==4) {
						answer[8-split2.length+i]=split2[i];
					}else {
						sb = new StringBuilder();
						for (int j = 0; j < 4-split2[i].length(); j++) {
							sb.append(0);
						}
						sb.append(split2[i]);
						answer[8-split2.length+i]=sb.toString();
					}
				}
			}
			
			
		}
		
		sb = new StringBuilder();
		for (int i = 0; i < 7; i++) {
			sb.append(answer[i]+":");
		}
		sb.append(answer[7]);
		System.out.println(sb);
	}
}

 

※ 내 생각

이 문제는 문자열을 이용하는 문제입니다.

먼저 이 문제를 해결하기 위해서 :: 를 구분하는 작업을 먼저 했습니다.

:: 가 없는 경우는 빈 공간만 채우는 작업을 진행하면 됩니다.

:: 가 있는 경우에는 ::를 기준으로 앞과 뒤를 확인 할 필요가 있습니다.
:: 의 앞에서 : 로 구분을 하여 그 길이 만큼 answer에 채워줍니다.
마찬가지로 뒷 부분도 채워줍니다.

가운데는 미리 선언을 했기 때문에 채울 필요가 없습니다.