[백준] 단어의 개수 - 1152번

2024. 5. 30. 16:17·여러가지/알고리즘 & 자료구조

[Bronze II] 단어의 개수 - 1152

문제 링크

성능 요약

메모리: 33624 KB, 시간: 496 ms

분류

구현, 문자열

제출 일자

2024년 5월 30일 09:36:51

문제 설명

영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

입력

첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.

출력

첫째 줄에 단어의 개수를 출력한다.

풀이

  • 결과 : 성공

  • 과정 :
    • 1차 시도 : 스캐너 클래스를 임포트하여 처리 하지 않음
    • 2차 시도 : 스캐너를 넣고 테스트 케이스를 콘솔에 입력하고 로컬에서 정상 확인, But 백준 FAIL. 원인 식별 불가
    • 3차 시도 : 문자열 입력 시 앞뒤로 공백에 추가 될 수 있다는 말에 스캐너로 받은 객체를 문자로 변형후 바로 trim처리 했지만 fail
    • 4차 시도 : split().length() 메서드로 한줄 처리한 코드를 for문과 count 변수를 정의하여 처리 후 성공
  • 코드
import java.util.Scanner;

public class Main {
    /**
     * 시간 복잡도 : O(n)
     *   - 이유 : 입력 문자열의 길이에 선형적으로 비례하여 실행 시간이 증가하기 때문입니다.
     *
     * 공간 복잡도 : O(1)
     *   - 이유 : 입력 문자열을 단어로 분할하여 루프를 실행하므로 추가 메모리가 필요하지 않습니다.
     *           따라서 공간 복잡도는 입력에 관계없이 상수 크기의 메모리를 사용합니다.
     *
     * @param  String strList : 스캐너를 통해 입력 받는 문자열
     * @return int    count   : 정수 반환 값
     *
     */
    public static int solution(String strList) {
        int count = 0;
        boolean prevSpace = true; // 이전 문자가 공백인지 여부를 나타내는 플래그

        for (char c : strList.toCharArray()) {
            if (c == ' ') {
                prevSpace = true; // 공백 문자를 만나면 플래그를 설정
            } else {
                // 공백 문자를 만나지 않은 경우, 이전 문자가 공백이었다면 단어 수를 증가시킴
                if (prevSpace) {
                    count++;
                }
                prevSpace = false; // 이전 문자가 공백이 아님을 나타내는 플래그 설정
            }
        }
        return count;
    }


    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine().trim();

        System.out.println(solution(s));

        scanner.close();
    }
}

---

저작자표시 (새창열림)

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

[백준] 상수 - 2908번  (0) 2024.05.30
[백준] 할리갈리 - 21760번  (0) 2024.05.30
스택: 데이터를 차곡차곡 쌓기  (0) 2021.11.29
🛩동적 배열이란?  (0) 2021.11.29
Differences between Stack and Heap  (0) 2021.11.29
'여러가지/알고리즘 & 자료구조' 카테고리의 다른 글
  • [백준] 상수 - 2908번
  • [백준] 할리갈리 - 21760번
  • 스택: 데이터를 차곡차곡 쌓기
  • 🛩동적 배열이란?
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (284)
      • 여러가지 (108)
        • 알고리즘 & 자료구조 (72)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (2)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (38)
        • 파이썬 (30)
        • 자바 (3)
        • 스프링부트 (5)
      • 운영체제 (0)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (5)
        • 암호화폐 (5)
        • 기타 (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
[백준] 단어의 개수 - 1152번
상단으로

티스토리툴바