알고리즘(Algorithm)

[Algorithm] 문장 속 단어

XDXDX 2023. 3. 10. 13:50

1. 문제

한 개의 문장이 주어지면 그 문장 속에서 가장 긴 단어를 출력해 보자.

문장 속의 각 단어는 공백으로 구분.

 

첫 줄에 가장 긴 단어를 출력한다. 가장 길이가 긴 단어가 여러 개일 경우 문장 속에서 가장 앞쪽에 위치한 단어 출력

2. 예시

It is timme to study
study

cat tiger lion puppy
tiger

3. 코드

그냥 for문으로 돌리기
향상된 for문

  1. 공백이 나오면 split을 사용해 문자열을 잘라 배열로 담아준다.
  2. 문장의 단어 중 가장 긴 단어를 찾으려면 단어의 길이를 확인해야 한다. 이때 비교대상이 필요하므로 int min = 0; 을 추가해 최소 길이 값을 만들어 놓는다.
    • 여기서 조건에 음수가 있으면 int min = Integer.MIN_VALUE;로 넣어 음수 일 경우도 비교할 수 있도록 한다.
      1. 데이터타입이 표현할 수 있는 숫자 범위 
      2. MIN_VALUE / MAX_VALUE -> 실제 개발 시, 값이 달라질 경우 숫자로 표현하면 따로 수정이 필요하지만  상수로 적어놓으면 수정할 필요 없다.
    • 현재는 정수 값만 비교하면 되므로 0으로 사용해도 무방함
  3. 담은 배열의 길이만큼 for문을 돌려 min과 길이를 비교한다.
  4. 출력예시 
    1. 문장 -> apple grape banana 
    2. if문이 성립할 경우, min에 a의 길이를 저장한다.
    3. 맨 처음 a [0]. length()가 min보다 크다 (5 > 0) if문이 성립되므로 min은 5로 저장된다.
    4. ans = a[0] -> apple
    5. a [1]. length()는 min보다 크다 5 > 5 -> 부등식이 fasle가 되므로 if문 성립이 되지 않는다. 
    6. 만약 = 가 포함되어 있으면 if 문 성립으로 ans의 값이 바뀔 것이다.
    7. a [2]. length()는 6이 되므로 if문 성립
    8. ans = banana

4. 마무리

split으로 겨우 결과 값 리턴했는데 indexOf(), substring()을 사용해서 리턴하는 방법이 있었다.

 

indexOf(),substring()

  1. while문의 조건을 보면 str.indexOf(' ')를 저장한 empty가 -1이 아닐 경우가 true이면 조건식이 성립하게 되어있다.
  2. 문장을 apple grape banana로 예시를 들어보자.
  3. substring을 사용해서 0부터 공백까지(empty) 자른 문자를 tmp에 저장한다.
  4. 저장한 tmp의 길이를 len에 담아 min과 길이 비교를 한다.(if문)
  5. if문이 성립하면 min에 len을 담아준다.(문자열 길이 비교)
  6. 다음 while문 조건식을 확인하기 위해 처음 str의 공백 다음 문자열이 시작하기 전까지 자른 후 str에 저장한다.
  7. while문이 돌다가 조건에 -1 되어 밖으로 나오게 되면 길이 비교식이 없으니 if문으로 추가한다.

 

시작은 0부터 할 것.

[indexOf()]

1.indexOf('A') - A를 찾는다. 

2.indexOf('A', 'n') - n번째부터 A를 찾는다.

순번은 정하지 않으면 0부터 즉, 처음부터 찾는다.

 

[substring()]

1.substring('A', 'B') - A부터 B-1까지 자른다.

2.substring('A') - A부터 출력하기

 

 

 

 

'알고리즘(Algorithm)' 카테고리의 다른 글

[Algorithm] 중복문자제거  (0) 2023.03.24
[Algorithm] 특정 문자 뒤집기  (0) 2023.03.23
[Algorithm] 단어 뒤집기  (0) 2023.03.13
[Algorithm] 대소문자 변환하기  (0) 2023.03.07
[Algorithm] 문자열 찾기  (0) 2023.03.06