
👇 공부한 자료들의 실제 소스파일들을 기록해논 공간입니다 👇
문장 속 긴문장 찾기
나의 풀이 과정
최대한 강의를 안 보고 혼자 풀어보려고 애썼다.
노트를 펴서 해당 문제를 풀려면 어떠한 로직으로 해야 하는지 적어봤고
모르는 메서드는 구글링해서 찾아보려고 했다.
우선 강의부터 듣고 푸는 것보다 문제 해결을 위해 내가 어떤 로직으로 해야 할지 구상 후에
모르는 것을 직접 구글링 하고 의미를 이해하고 그걸 코드로 푸는 게
맞는 방법 같았다.
메모장에 적어본 문제를 푸는 과정
1. 문자열 입력 시 엔터를 누를 때까지의 문자열을 입력받아야 된다
2. 공백을 기준으로 문자열을 잘라야 된다
3. 자른 문자열 길이를 비교해서 가장 길이가 긴 문자열을 출력해야 된다
nextLine()
입력값을 받을 때 기존에 in.next만 사용했었다
그걸 사용하니 발생된 문제점
입력된 문자열에 공백이 생길 경우 공백 전까지만 데이터가 입력되었다
예를 들어 "안녕하세요 유리쯔의일상입니다"라는 문자열을 입력 시
안녕하세요 까지만 출력이 된다.
공백이 들어간 문자열을 입력 시 nextLine()으로 입력받아야 개행문자까지 입력을 받는 걸 알았다.
그렇게 긴 문장을 입력받게 하였다
split()
문자열 자르기가 필요했다.
특정 문자를 인식시켜서 자르는 split 메서드를 사용하여 문자열을 공백을 기준으로 잘랐다.
그리고 그 데이터 값은 strArray라고 하는 문자열 배열 저장하였다.
For문으로 배열마다 값을 출력해 보고 잘 잘라져 들어간 데이터 값을 확인했다.
그러고 난 뒤에 제일 긴 값을 비교하는 걸 생각해야 했다
긴 문자열 비교
우선 입력 데이터 값으로는 It is time study muyaho party time라는 문장을 넣어봤다
strArray [0] = it
strArray [1] = is
strArray [2] = time
strArray [3] = study
strArray [4] = muyaho
strArray [5] = party
staArray [6] = time
이렇게 저장이 되는데
인덱스 0번 = 2
인덱스 1번 = 2
인덱스 2번 = 4
인덱스 3번 = 5
인덱스 4번 = 6
인덱스 5번 = 5
인덱스 6번 = 4
가장 긴 길이의 인덱스는 4번은 muyaho였다
그럼 비교를 할 때 해당 인덱스의 길이를 비교하면 되지 않을까?라는 생각이 들었다
for문으로 반복을 돌리는데 if 만약에 answer의 길이(초기값은 빈값)보다 i의 인덱스 길이가 크거나 같다면
answer에 그 값을 대입해라라고 돌렸다.
그러면 될 것 같았다!
내가 작성한 코드
결과
강의 풀이과정
public class Main {
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) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.nextLine();
System.out.println(T.solution(str));
}
}
public 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.println(T.solution(str));
}}
indexOf()
특정 문자나 문자열이 앞에서부터 처음 발견되는 인덱스를 반환하며
만약 찾지 못했을 경우 -1을 반환한다.
사용법 :. indexOf("찾을 특정 문자" , "시작할 위치-생략 시 첫 인덱스부터")
공백 역시 하나하나 문자로 보고 있기 때문에 빈칸 또한 인덱스번호가 적용된다.
substring()
substring 함수는 두 가지가 있다
첫째 : 인자값을 하나만 받는 함수👋
인자값은 Int형으로 substring 하고자 하는 문자열의 앞에서부터 몇 번째 위치인가를 지정하는 값이다.
입력받은 인자값을 Index로 해당 위치를 포함하여 이후 모든 문자열을 리턴 시킨다
String str = "01234567890";
str.substring(5);
이렇게 할 경우 0~4까지를 제외한 567890을 가져온다.
Index값이 5인 위치부터 가져오라고 했기 때문에 01234는 버리고 나머지만 가져오게 된다.
String str2 = "안녕하세요";
str2.substring(3);
이렇게 인덱스가 정의되어서 3번인 세 글자부터 가져온다
실제 출력은 "세요"
둘째 : 인자값이 2개인 함수
substring(int beginindex , int endindex)
beginindex : 가져올 문자열의 시작 부분 지정
endindex : 가져올 문자열의 끝 부분을 지정
#### beginindex 시작 / 자를 문자열 / endindex 전 위치까지 값 리턴
String str = "나는 자바공부 중 입니다"
str.substring(3,7);
substring 2부터 시작하여 5까지로 지정해놨기 때문에
"자바공부"를 출력한다
3 이 시작점이고 7은 종료점인데 -1을 해줘야 한다, 실제 종료는 6까지 출력 후 종료된다 보면 된다
'👩🏻💻 𝐋𝐚𝐧𝐠𝐮𝐚𝐠𝐞 > ⠀⠀⠀⠀ Aʟɢᴏʀɪᴛʜᴍ' 카테고리의 다른 글
Algorithm - 중복문자제거 (1) | 2023.10.10 |
---|---|
Algorithm - 특정 문자 뒤집기 (0) | 2023.09.24 |
Algorithm - 단어 뒤집기 (1) | 2023.09.24 |
Algorithm - 대소문자 변환 (0) | 2023.09.18 |
Algorithm - 문자열 안에 특정 문자 갯수 알아내기 (0) | 2023.09.18 |