티스토리 뷰
문제
한 개의 문장이 주어지면 그 문장 속에서 가장 긴 단어를 출력하는 프로그램을 작성하세요.
문장속의 각 단어는 공백으로 구분됩니다.
입력
첫 줄에 길이가 100을 넘지 않는 한 개의 문장이 주어집니다. 문장은 영어 알파벳으로만 구성되어 있습니다.
출력
첫 줄에 가장 긴 단어를 출력한다. 가장 길이가 긴 단어가 여러개일 경우 문장속에서 가장 앞쪽에 위치한 단어를 답으로 합니다.
예시 입력
it is time to study
예시 출력
study
문제 풀이
[첫번째 풀이]
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String input = in.nextLine();
String result = "";
String[] arr = input.split(" ");
for (String str : arr) {
if (result.length() < str.length()) {
result = str;
}
}
System.out.println(result);
}
}
(Time 173ms / Memory 27MB)
import java.util.Scanner;
public class Main {
public String Solution(String input) {
String result = "";
String[] arr = input.split(" ");
for (String str : arr) {
if (result.length() < str.length()) {
result = str;
}
}
return result;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String input = in.nextLine();
Main main = new Main();
System.out.println(main.Solution(input));
}
}
(Time 161ms / Memory 27MB)
[두번째 풀이]
import java.util.Scanner;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String input = in.nextLine();
String result = "";
StringTokenizer tokenizer = new StringTokenizer(input);
while (tokenizer.hasMoreTokens()) {
String str = tokenizer.nextToken();
if (result.length() < str.length()) {
result = str;
}
}
System.out.println(result);
return ;
}
}
(Time 152ms / Memory 27MB)
import java.util.Scanner;
import java.util.StringTokenizer;
public class Main {
public String Solution(String input) {
String result = "";
StringTokenizer tokenizer = new StringTokenizer(input);
while (tokenizer.hasMoreTokens()) {
String str = tokenizer.nextToken();
if (result.length() < str.length()) {
result = str;
}
}
return result;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String input = in.nextLine();
String result = "";
StringTokenizer tokenizer = new StringTokenizer(input);
while (tokenizer.hasMoreTokens()) {
String str = tokenizer.nextToken();
if (result.length() < str.length()) {
result = str;
}
}
Main main = new Main();
System.out.println(main.Solution(input));
}
}
(Time 163ms / Memory 27MB)
[세번째 풀이]
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String input = in.nextLine();
String result = "";
while (!input.isEmpty()) {
String str = input;
if (input.contains(" ")) {
str = str.substring(0, str.indexOf(" "));
}
if (result.length() < str.length()) {
result = str;
}
if (!input.contains(" ")) {
break;
}
input = input.substring(input.indexOf(" ") + 1);
}
System.out.println(result);
}
}
(Time 147ms / Memory 27MB)
import java.util.Scanner;
public class Main {
public String Solution(String input) {
String result = "";
while (!input.isEmpty()) {
String str = input;
if (input.contains(" ")) {
str = str.substring(0, str.indexOf(" "));
}
if (result.length() < str.length()) {
result = str;
}
if (!input.contains(" ")) {
break;
}
input = input.substring(input.indexOf(" ") + 1);
}
return result;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String input = in.nextLine();
Main main = new Main();
System.out.println(main.Solution(input));
}
}
(Time 164ms / Memory 27MB)
- 스페이스를 잡기 위해 " ", "\\s", "\\s+" 공백 정규식까지 다 넣어서 split 시켜봤는데 실패했다.
Scanner in = new Scanner(System.in);
String input = in.next();
String result = "";
String[] arr = input.split(" ");
for (String str : arr) {
if (result.length() < str.length()) {
result = str;
}
}
System.out.println(result);
- split에 문제가 있나해서 StringTokenizer를 사용해서 공백으로 구분자를 넣어 분리해보았는데 토큰의 길이를 잡기 못해 이 또한 아예 런타임 에러가 났다.
Scanner in = new Scanner(System.in);
String input = in.nextLine();
String result = "";
StringTokenizer tokenizer = new StringTokenizer(input);
while (tokenizer.hasMoreTokens()) {
String str = tokenizer.nextToken();
if (result.length() < str.length()) {
result = str;
}
}
System.out.println(result);
- 이유는 다른게 아니라 콘솔에서 아규먼트를 입력 받을 때 next()가 아닌 nextLine()으로 받아야하는데 계속 공백을 다음 아규먼트로 인식해서 생긴 문제였다.
- 백준 방식이나 프로그래머스 방식이나 시간 단축에 크게 영향은 없는 것 같다.
- 마지막으로 substring을 이용해서 세번째 풀이처럼 풀어봤다. 어째 substring을 이용한 방식이 코드 짜는데 제일 시간이 많이 걸렸다.
'Java > Coding Test' 카테고리의 다른 글
[코딩테스트] 중복문자제거 (0) | 2022.02.25 |
---|---|
[코딩테스트] 특정 문자 뒤집기 (0) | 2022.02.22 |
[코딩테스트] 단어 뒤집기 (0) | 2022.02.22 |
[코딩테스트] 대소문자 변환 (0) | 2022.02.21 |
[코딩테스트] 문자 찾기 (0) | 2022.02.21 |