본문 바로가기
알고리즘/Java 코딩 테스트 준비

[Java] 문장 속 단어(문장 속 가장 긴 단어를 출력하시오)

by Dev dreamer 2023. 1. 22.

 

문제

 

입력

 

i am a boy hahaha hohoho

 

출력

 

hahaha( 글자가 동일한 단어들이 있으면 앞에 단어 출력)

 

입력받은 문장을 arr에 담아야 하는데 이때 split(" ")을 통해서 구분지어 arr에 담아준다

즉 스페이스바 (띄어쓰기) 기준으로 담아주고

 

이를 향상된 for문에 담아서 뒤에 들어오는 값이 크면 a에 x 를 넣어주는 것이다.

이때 크기가 동일하면 우선 들어간 a 값이 그대로 a 에 유지되게 된다.

 

여기서 좀 해맸던 부분은 kb를 Scanner로 입력받고 str에 넣을때

next()로 넣어서 스페이스바 딱 한 단어만 들어가서 한참 고민했다!

 

한 줄을 통째로 받으려면 nextLine()을 받아야 한다!

import java.util.Scanner;

public class Main {
	
	public String solution(String str) {
		
		String answer = " ";
		String arr[] = str.split(" ");
		String a = "";
		int cnt =1;
		
		for(String x : arr) {
			
			System.out.println(cnt+"번째"+"a의 길이"+a.length());
			System.out.println(cnt+"번째"+"x의 길이"+x.length());
			cnt++;

			if(a.length()<x.length()) a=x;
		}
		answer=a;
		return answer;
	}
	
	public static void main(String args[]) {
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		String str = kb.nextLine();
		System.out.println(T.solution(str));
	}
}

강사님 풀이 들으면서 필기하기!

 

 

int m 을 가장 작은값으로 초기화 시키는 코드.

-2의 31제곱으로 초기화 된다고 한다.. 

그렇군 ..허허허..ㅠㅠ

 

오 String에 배열을 주는 경우랑 arr에 배열 표시를 주는 경우랑 둘다된다!

 

각 단어를 길이로 환산하고 비교하는 것.

다른 방법!

 

여기서 indexOf 가 무엇일까?

 

indexOf() - 특정 문자나 문자열에서 해당하는 문자의 인덱스 값을 반환하고 못 찾을 경우 '-1' 반환

즉 못찾을 경우에 -1 을 반환하므로 찾는 경우까지 계속 트루라는 것 while문을 돌리겠다는 것이며

pos에는 띄어쓰기가 발견되기 까지의 index 번호가 발견된다.

 

nice to meet you 를 예시로 다시  설명해보자. 처음 띄어쓰기를 발견하는 위치의 idnex 숫자는 4일것이다

그러면 pos 에 4가 들어갈 것이다. substring 을 통해서 index 0부터 pos 까지 잘라주면

 

여기서 subString의 특징을 알아보면 subString(0,4) 라고 했을때 실제로는 index 0,3 번째 까지 글을 잘라낸다

즉 띄어쓰기 위치까지 잘라내는 것이 아니라 그 전단어까지 잘라냄으로 위 상황에서는 그대로 쓰면 된다.

이때 길이를 len에 넣고 최소값으로 초기화 해둔 m 과 계속 비교하면서 값을 넣어준다

그리고 기존의 str 에서 한번 길이를 조회한 단어는 잘라내야 하는데

조회했던 위치 그 다음부터 끝까지 자르고 싶으면

subString( 숫자) 해당 숫자 위치부터 뒤에까지 쭉 담아 줄 수 있는 것이다.

 

그리고 중요한것!

 

문장의 맨 마지막에는 띄어쓰기가 없으므로 

최종적으로 남은 단어를 갖은 str을 가지고 m과 비교를 해주는 단계를 거쳐야 한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

코테 관련해서 많이 부담스러웠는데 강의를 통해 푸는 방법을 배우니까 재밌는것 같습니다.

출처 : 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 대시보드 - 인프런 | 강의 (inflearn.com)

 

 

 

 

 

 

 

 

 

 

댓글