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에 채워줍니다.
마찬가지로 뒷 부분도 채워줍니다.
가운데는 미리 선언을 했기 때문에 채울 필요가 없습니다.