백준 온라인 저지에서 문제를풀어보자 #2

in #kr6 years ago

https://www.acmicpc.net/problem/1152

단어의 개수 를 구하는 문제입니다. 저번 포스팅에서 사용한 스플릿을 이용하면 쉽게 풀수 있습니다.
캡처.PNG

물론 좀더 정확하게 설명을 한다면

Scanner 를이용해서 nextLine()라는 스캐너에 내장되어있는 메서드를 이용해

1줄단위로 문자열을 입력받고

.trim()메서드를 이용해서 문자열의 앞뒤에 있는 공백(" ")을 제거한뒤에

if(tmp.length()==0)에서 문자열의 길이가 0일경우 0을 출력시키고 종료

0이 아니라면

String res[] 문자열배열에 = tmp를 " " 공백을 기준으로 잘라서 문자열배열에 저장한뒤

res.length 즉 배열의 길이를 출력(단어의 갯수를 출력) 시키는 방식으로 소스를 작성했습니다.

Sort:  

아 요 문제 :3... 한 달 전에 풀었다가 대여섯번 틀렸습니다 뜨고 포기한 문제군요 😊... (따흐흑) 요즘 언어 배우다 보니 백준에 잘 안들어갔는데 이거 보니까 다시 문제 풀어보고 싶어지네요 ㅎㅎㅎ @gmba 님 글 보면서 열심히 의지 불태워야겠어요! 팔로우와 저의 자그마한 보팅도 하고 가겠습니당 앞으로 자주 봬요 😊

보팅 팔로우 댓글 정말 감사합니다 ㅎㅎㅎ 자주 뵀으면해요 ㅎㅎ

scannner 의 getNext() 로 토큰을 읽어오면,
여러 줄 입력에 대해서도 처리가 가능하고 한줄을 읽어서 split 할 필요가 없습니다.

여러줄을 입력받는 경우에 복잡도를 계산해 보면,
현재 소스의 경우, 문장을 읽기 위해서 문자열을 스캔하고, 그 문자열을 또 스캔(split) 해야 하므로 O = N^2 이 나오며,
getNext() 를 사용하는 경우 문자열 스캔을 1회만 하면 되므로 O = N 이 나옵니다.
복잡도 계산은 참고만 하세요. 정확한 것은 라이브러리 소스를 까봐야 정확히 알 수 있습니다.

댓글 감사합니다. 해당 문제에서 "영어 대소문자와 띄어쓰기만으로 이루어진 문장이 주어진다" 라는 문제에 대한 설명이 있어서 문자열은 1개의 라인만 주어진다고 가정하고 문제를 풀었습니다. 만약 말씀하신것처럼 여러 라인의 경우에는 라인별로 읽는것보다는 getNext()함수를 이용해서 문자열을 저장하지않고 읽힌값의 길이가 0이 아닌 경우에 카운트 하는게 split등을 이용해서 푸는것보다는 훨씬 속도가 빠르겠네요 의견 & 보팅 정말 감사드립니다. ㅎㅎ 저도 공부하면서 문제를 풀기때문에 부족한게 많습니다. 혹시 나중에도 소스에 의문점이나 다른의견 주시면 전부 읽어보고 피드백을 꼭드리겠습니다.

Coin Marketplace

STEEM 0.19
TRX 0.13
JST 0.029
BTC 58196.53
ETH 3121.03
USDT 1.00
SBD 2.42