코딩테스트 기초 - String 문장속단어

고장난 고양이·2022년 3월 24일
0

codingtest-java

목록 보기
6/21

코딩테스트 기초 - String

문장 속 단어

문제

설명

한 개의 문장이 주어지면 그 문장 속에서 가장 긴 단어를 출력하는 프로그램을 작성하세요.

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

입력

첫 줄에 길이가 100을 넘지 않는 한 개의 문장이 주어집니다. 문장은 영어 알파벳으로만 구성되어 있습니다.

출력

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

단어를 답으로 합니다.

예시 입력 1

it is time to study

예시 출력 1

study

코드

import java.util.Scanner;
  
public class Main {
  public String solution(String str){
        String answer="";
        String[] str2=str.split("\\s");
        for(int i=0; i < str2.length;i++){
            //System.out.println(str2[i]);
            if(str2[i].length()>answer.length()){
                answer=str2[i];
            }
        }
        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner sc= new Scanner(System.in);
        String str=sc.nextLine();
        System.out.println(T.solution(str));
    }
}

split을 이용해 공백을 통해 나누어서 리스트로 변환
변환된 리스트를 순서대로 하나씩 길이를 비교하여 더긴 단어일경우 교체한다.
">"로 해놓았기때문에 같은 길이의 단어가 나와도 맨앞에나온경우가 선택된다.

사용한 문법

  • String[] strArr = str.split("구분할 조건");
    구분할 조건(공백: "\s" or " " \ : "\" .. 등등)에 맞춰서 문자열을 자르고 리스트로 변형한다.
  • Scanner -> sc.nextLine();
    sc.next();는 공백을 포함하지않는다. 따라서 nextLine()을 통해서 공백을 포함한 문자열을 담아야한다.

참고 코드

import java.util.*;
class Main {	
	public String solution(String str){
		String answer="";
		int m=Integer.MIN_VALUE, pos;
		while((pos=str.indexOf(' '))!=-1){
			String tmp=str.substring(0, pos);
			int len=tmp.length();
			if(len>m){
				m=len;
				answer=tmp;
			}
			str=str.substring(pos+1);
		}
		if(str.length()>m) answer=str;
		return answer;
	}

	public static void main(String[] args){
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		String str=kb.nextLine();
		System.out.print(T.solution(str));
	}
}
  • pos = str.indexOf(' ') == 빈칸의 위치를 int 값으로 반환하여 pos 에 저장한다.
    없으면 -1을 반환한다.
  • str.substring(시작점, 끝점+1) == 시작점부터 끝점까지 잘라서 저장
  • str.substring(시작점) == 시작점부터 끝까지 저장

즉 이코드는 빈칸을 찾아서 pos에 저장하고 문자열에 빈칸이 존재할때까지 while을 실행한다.
문자열을 빈칸까지 잘라서 길이를 비교하고 길면 저장 아니면 패스한다.
그리고 빈칸의 위치 뒤부터 다시 시작해서 빈칸이 없을때까지 비교한다.

profile
개발새발X발일지

0개의 댓글

관련 채용 정보