[백준] 열 개씩 끊어 출력하기 - 11721번

2024. 6. 1. 22:09·여러가지/알고리즘 & 자료구조

[Bronze III] 열 개씩 끊어 출력하기 - 11721

문제 링크

성능 요약

메모리: 14280 KB, 시간: 124 ms

분류

문자열, 구현

제출 일자

2024년 6월 1일 00:14:29

문제 설명

알파벳 소문자와 대문자로만 이루어진 길이가 N인 단어가 주어진다.

한 줄에 10글자씩 끊어서 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 단어가 주어진다. 단어는 알파벳 소문자와 대문자로만 이루어져 있으며, 길이는 100을 넘지 않는다. 길이가 0인 단어는 주어지지 않는다.

출력

입력으로 주어진 단어를 열 개씩 끊어서 한 줄에 하나씩 출력한다. 단어의 길이가 10의 배수가 아닌 경우에는 마지막 줄에는 10개 미만의 글자만 출력할 수도 있다.

코드



import java.io.*;


public class Main {
    private static int CHUNK_SIZE = 10;
    public static void main(String[] args) throws IOException {
/**
 * 문제
 * 알파벳 소문자와 대문자로만 이루어진 길이가 N인 단어가 주어진다.
 *
 * 한 줄에 10글자씩 끊어서 출력하는 프로그램을 작성하시오.
 *
 * 입력
 * 첫째 줄에 단어가 주어진다. 단어는 알파벳 소문자와 대문자로만 이루어져 있으며, 길이는 100을 넘지 않는다. 길이가 0인 단어는 주어지지 않는다.
 *
 * 출력
 * 입력으로 주어진 단어를 열 개씩 끊어서 한 줄에 하나씩 출력한다. 단어의 길이가 10의 배수가 아닌 경우에는 마지막 줄에는 10개 미만의 글자만 출력할 수도 있다.
 */

        //         입력 데이터를 명시적으로 작성
//        String input =  "BaekjoonOnlineJudge";
//        String input =  "OneTwoThreeFourFiveSixSevenEightNineTen";

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//        BufferedReader br = new BufferedReader(new StringReader(input));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String chunkString = br.readLine();
        int length = chunkString.length();

        for(int i = 0; i < length; i += CHUNK_SIZE){
            int end = Math.min(length, i + CHUNK_SIZE);
            String unitString =chunkString.substring(i, end);
            bw.write(unitString);
            bw.newLine();
        }


        bw.flush();
        bw.close();
    }
}

시간 복잡도

위 코드는 입력된 문자열을 10글자씩 끊어서 출력하는 프로그램입니다. 이 코드의 시간 복잡도를 분석해보겠습니다.

시간 복잡도 분석

주요 연산 분석

입력 읽기 (O(N))

  • String chunkString = br.readLine();
    • 이 줄은 입력된 문자열을 한 번에 읽습니다. 입력 길이를 N이라고 할 때, 이 연산은 O(N)의 시간 복잡도를 가집니다.

반복문 (O(N))

  • for (int i = 0; i < length; i += CHUNK_SIZE)
    • 이 반복문은 i를 0부터 문자열의 길이 (length = N)까지 CHUNK_SIZE (10)만큼 증가시키며 실행됩니다.
    • 반복문의 총 반복 횟수는 N / CHUNK_SIZE = N / 10입니다. 즉, 반복문의 횟수는 O(N/10)입니다. 상수를 무시하면 O(N)으로 볼 수 있습니다.

부분 문자열 추출 및 출력 (O(1))

  • Sring unitString = chunkString.substring(i, end);
    • substring 메서드는 시작 인덱스와 끝 인덱스를 사용하여 부분 문자열을 추출합니다. 이 메서드는 상수 시간 O(1)에 실행됩니다.
  • bw.write(unitString); bw.newLine();
    • BufferedWriter의 write와 newLine 메서드는 각각 O(1)의 시간 복잡도를 가집니다.

총 시간 복잡도

위에서 각 주요 연산의 시간 복잡도를 고려하여, 전체 코드의 시간 복잡도를 계산할 수 있습니다.

  • 입력 읽기: O(N)
  • 반복문 내 연산 (부분 문자열 추출 및 출력): O(N) (반복문 자체가 O(N), 각 반복 내 연산이 O(1))

따라서, 전체 프로그램의 시간 복잡도는 다음과 같이 합산됩니다:

[ O(N) + O(N) = O(N) ]

결론

이 프로그램의 시간 복잡도는 O(N)입니다. 여기서 N은 입력 문자열의 길이입니다. 이 복잡도는 주어진 문제의 조건 (문자열 길이가 100을 넘지 않음) 내에서는 매우 효율적입니다.

저작자표시 (새창열림)

'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글

[백준] 신기한 소수 찾기 - 2023번  (1) 2024.06.10
[백준] 나이트의 이동 - 7562번  (1) 2024.06.10
[백준] KMP는 왜 KMP일까? - 2902번  (0) 2024.06.01
동적 프로그래밍과 반대 개념 프로그래밍  (1) 2024.05.31
[백준] 피보나치 수1 - 24416번  (0) 2024.05.31
'여러가지/알고리즘 & 자료구조' 카테고리의 다른 글
  • [백준] 신기한 소수 찾기 - 2023번
  • [백준] 나이트의 이동 - 7562번
  • [백준] KMP는 왜 KMP일까? - 2902번
  • 동적 프로그래밍과 반대 개념 프로그래밍
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (286)
      • 여러가지 (107)
        • 알고리즘 & 자료구조 (72)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (38)
        • 파이썬 (30)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (5)
        • 암호화폐 (5)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    EC2
    Spring Boot
    시험
    OOP
    java
    파이썬
    Python
    DP
    백준
    프로그래머스
    Redis
    SAA
    FastAPI
    docker
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    취업리부트
    mybatis
    spring
    reactor
    자바
    완전탐색
    WebFlux
    celery
    항해99
    ecs
    Spring WebFlux
    AWS
    Docker-compose
    그리디
    RDS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
[백준] 열 개씩 끊어 출력하기 - 11721번
상단으로

티스토리툴바