peacekim
할 수 있는 것과 할 수 없는 것.
peacekim
전체 방문자
오늘
어제
  • 분류 전체보기 (68)
    • 👨‍🏫ps (44)
      • ❄️프로그래머스 (20)
      • 🔟0️⃣백준 (21)
      • leetcode (3)
    • ✍🏻study (20)
      • 👐java (6)
      • 🍃spring (1)
      • 🥇algorithm (0)
      • 🚘oodp (4)
      • 📒 jpa (3)
      • 👣DB (2)
      • 🌂네트워크 (0)
      • 🎸기타 (3)
      • 👊 kotlin (1)
      • 🫥 jvm (0)
    • 📽project (4)
      • 🎀ReBoN (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
peacekim

할 수 있는 것과 할 수 없는 것.

[백준] 3107번 IPv6 풀어보기 [Java]
👨‍🏫ps/🔟0️⃣백준

[백준] 3107번 IPv6 풀어보기 [Java]

2022. 3. 10. 18:09
반응형

IPv6는 축약이 가능하다. 그래서 축약이 된 IPv6주소가 들어온다면, 축약전으로 출력을 해주는 문제이다.

문제를 풀면서 여전히 구현력이 부족하구나라는 생각이 들었고, 구현 문제를 더 많이 풀어야 겠다는 생각이 들었다.

 

👨‍🏫 풀이

입력을 :로 split을 해주었다. :로 split을 했을 때, :가 연속으로 나오고 뒤에 숫자가 있는 경우는 :: 사이를 길이가 0인 String 객체로 반환하지만, ::가 맨 뒤에 나오는 경우는 아무 것도 반환하지 않는다. 

:을 split한 list의 크기(part)를 얻고, 만약 그 list안에 0인 String이 있다면, 크기에서 빼줬다. 

:으로 split한 list를 하나씩 보았다. 만약, 해당 String의 길이가 0이고, part가 8보다 작다면, 0000:을 추가해주고, part를 더해주고, count도 세어주었다.

만약 part가 8인데 길이가 0인 String이 나왔다면 그냥 넘어가 줬고, 만약 String의 길이가 0이 아닌 객체가 나왔다면, 4 - 객체의 길이만큼 0을 더해주었다. 맨 끝  부분은 :을 넣으면 안되기 때문에 count한것을 바탕으로 맨끝이 아닐 경우만 :을 추가해줬다.

위에 방법으로는 맨 뒤가 ::가 나올때는 처리할 수 없기 때문에, count센 것이 8보다 작다면 0000을 추가해줬다.

 

👨🏻‍💻 코드

package 번3107;

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

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(":");
        int part = input.length;
        for (String tmp : input) {
            if(tmp.length() == 0) part--;
        }
        StringBuilder sb = new StringBuilder();
        int idx = 0;
        int cnt = 0;
        while ( idx < input.length ) {
            String tmp = input[idx];
            if ( tmp.length() == 0 && part < 8){
                sb.append("0000");
                sb.append(":");
                cnt++;
                part++;
            } else if ( tmp.length() == 0 ) {
                idx++;
                continue;
            } else if ( tmp.length() != 0) {
                for(int i = 0 ; i < 4 - tmp.length() ; i++){
                    sb.append("0");
                }
                sb.append(tmp);
                idx++;
                cnt++;
                if(cnt < 8) sb.append(":");
            }
        }
        while (cnt < 8) {
            sb.append("0000");
            cnt++;
            if(cnt < 8) sb.append(":");
        }
        System.out.println(sb);
    }
}
반응형

'👨‍🏫ps > 🔟0️⃣백준' 카테고리의 다른 글

[백준] 20058번 마법사 상어와 파이어스톰 풀어보기 [Java]  (0) 2022.03.11
[백준] 20056번 마법사 상어와 파이어볼 풀기 [Java]  (0) 2022.03.11
[백준] 1913번 달팽이 풀기 [Java]  (0) 2022.03.08
[백준] 16964번 DFS 스페셜 저지 풀어보기 [Java]  (0) 2022.03.08
[백준] 1261번 알고스팟 풀어보기 [Java]  (0) 2022.03.07
    '👨‍🏫ps/🔟0️⃣백준' 카테고리의 다른 글
    • [백준] 20058번 마법사 상어와 파이어스톰 풀어보기 [Java]
    • [백준] 20056번 마법사 상어와 파이어볼 풀기 [Java]
    • [백준] 1913번 달팽이 풀기 [Java]
    • [백준] 16964번 DFS 스페셜 저지 풀어보기 [Java]
    peacekim
    peacekim
    할 수 있는 것과 할 수 없는 것. github: https://github.com/PyeongGangKim

    티스토리툴바