[백준] 단어의 개수 - 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
  • 전체
    오늘
    어제
    • 분류 전체보기 (283)
      • 여러가지 (107)
        • 알고리즘 & 자료구조 (72)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바