* 문제 설명
문장 속의 각 단어는 공백으로 구분되고 한 개의 문장이 주어지면 그 문장 속에서 가장 긴 단어를 출력하는 문제
(출력: 첫 줄에 가장 긴 단어를 출력하고 가장 길이가 긴 단어가 여러개일 경우 문장속에서 가장 앞쪽에 위치한 단어를 답으로 함.)
예시 입력 1
it is time to study
예시 출력 1
study
* 소스코드1
풀기 전 생각)
공백을 기준으로 나누면 되지 않을까? => split()먼가 생각으로는 처음 나온 공백을 기준으로 앞 글자들을 묶고 공백이 나올 때마다 반복한 다음
그 묶여진 단어들을 배열에 넣어서 비교하면 되지 않을까? 싶음 => String[] arr = str.split(" ");
1. 공백으로 구분된 단어들을 입력받고
2. 해당 단어를 " "으로 split해서 String Array를 만든다.
3. 만든 String Array를 for loop 돌리면서 현재 length가 제일 큰 값을 찾아내서 출력.
주의) 단어를 한 줄을 입력받을 때는 nextLine()을 사용한다.
import java.util.Scanner;
public class Main3 {
public String solution(String str){
String answer = "";
String[] arr = str.split(" ");
for(String splitString : arr) {
if(splitString.length() > answer.length()) {
answer = splitString;
}
}
return answer;
}
public static void main(String[] args) {
Main3 T = new Main3();
Scanner kb = new Scanner(System.in);
String str = kb.nextLine();
System.out.println(T.solution(str));
kb.close();
}
}
* 소스코드2
import java.util.Scanner;
public class Main3 {
public String solution(String str){
String answer = "";
int m = Integer.MIN_VALUE; //??? => 굳이 이렇게 하는 이유가 궁금함.
String[] s = str.split(" ");
for(String x :s) {
int len = x.length();
if(len > m) {
m = len;
answer = x;
}
}
return answer;
}
public static void main(String[] args) {
Main3 T = new Main3();
Scanner kb = new Scanner(System.in);
String str = kb.nextLine(); //문장을 입력받기 때문에 nextLine()으로 받는다.
System.out.println(T.solution(str));
kb.close();
}
}
* 추가공부
1) for each문 (1-2 복습)
- for문의 기본형식 -> for(초기화식; 조건식; 업데이트식) 실행부분;
- for each문의 형식 -> for(변수타입 변수이름 : 배열(혹은리스트)이름) 실행부분;
for each문은 배열의 항목 수만큼 실행부분을 반복하며 반복이 이루어질 때마다 배열의 항목을 순서대로 꺼내어 변수에 자동으로 대입해준다.
//for each문의 간편성을 알 것만 같기도 하고..
for(String splitString : arr) {
if(splitString.length() > answer.length()) {
answer = splitString;
}
}
2) split()
- String.split()의 경우 특정 문자나 문자열을 기준으로 문자열을 잘라주는 함수이다.
#how to use method
String str = "Beenzino#Dok2#The Quiett";
String[] splitData = str.split("#");
for(int i=0; i<splitData.length; i++) {
System.out.println("splitData"+i+" : " + splitData[i]);
}
위의 코드를 예제로 split 함수를 살펴보면
str 변수에 "Beenzino#Dok2#The Quiett" 문자열이 들어가고 splitData 배열에 "#" 문자 기준으로 str 문자열을 잘라 넣어줍니다.
split 함수의 리턴 값은 String[] 이기 때문에 splitData 변수는 스트링 배열값으로 선언해 주어야 정상적으로 값이 저장됩니다.
(*참고사이트: https://heisanbug.tistory.com/14)
* 소스코드3
이해가 안 됨.. 나중에 다시 공부하기
import java.util.Scanner;
public class Main3 {
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) {
Main3 T = new Main3();
Scanner kb = new Scanner(System.in);
String str = kb.nextLine(); //문장을 입력받기 때문에 nextLine()으로 받는다.
System.out.println(T.solution(str));
kb.close();
}
}
07/21 복습
// 한 개의 문장이 주어지면 그 문장 속에서 가장 긴 단어를 출력
// 문장 속의 각 단어는 공백으로 구분됨
// 첫 줄에 가장 긴 단어를 출력, 가장 길이가 긴 단어가 여러 개일 경우 문장 속에서 가장 앞쪽에 위치한 단어를 답으로
import java.util.*;
public class Practice_03_num2 {
public String solution(String str) {
String answer="";
String[] s = str.split(" "); //문자열을 공백을 기준으로 나눈 배열
//it is time to study
//["it", "is", "time", "to", "study"]
for(String x : s) { // for each문에서는 배열을 넣어야함.
if(x.length() > answer.length()) {
answer = x;
}
}
return answer;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Practice_03_num2 T = new Practice_03_num2();
Scanner kb = new Scanner(System.in);
String str = kb.nextLine(); //문자열을 입력받아야하기 때문에 nextLine() 사용
System.out.println(T.solution(str));
}
}
'Problem Solving > Algorithm Concepts' 카테고리의 다른 글
[알고리즘] 스택(Stack) 정리 & 문제 풀이(Python) (0) | 2022.01.31 |
---|---|
[운영체제] 메모리 구조 (재귀호출 vs 반복문) (0) | 2022.01.26 |
[알고리즘] 재귀함수(Recursive function) 정리 & 문제 풀이(Python) (0) | 2022.01.13 |
[Java Algorithm] 1-2 대소문자 변환(대문자는 소문자로, 소문자는 대문자로) (0) | 2021.08.15 |
[Java Algorithm] 1-1 문자 찾기(자바 한 문자만 입력 받기, 대소문자 변환) (0) | 2021.08.14 |