| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ORM
- spring boot
- 핵심가이드
- array
- queue
- 컴퓨터 구조
- 스프링부트
- spring
- 연관관계
- 개발자
- restTemplate
- JWT
- Java
- 서버
- QueryDSL
- 백엔드스쿨
- 제로베이스
- SpringSecurity
- 백엔드
- 자료구조
- 백엔드공부
- LinkedList
- SpringBoot
- 백준
- 컴퓨터 공학
- error
- JPA
- actuator
- 프로그래머스
- TestCode
Archives
- Today
- Total
be_better
[Goormthon] 문자열 나누기 본문
목차
💎 문제링크
구름LEVEL
난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.
level.goorm.io
📝 문제

✍🏻 입력 & 출력

🤔 풀기 전에 생각하기
문자열을 앞에서 부터 자르는 문제이기 때문에 바로 substring이 생각이 났다.
나올 수 있는 문자열을 나누어 중복없이 정렬해서 저장하는 문제 TreeSet으로 해결할 수 있다.
문제는 원소를 하나라도 포함하고 있는 3개의 문자열로 어떻게 쪼갤것이냐의 문제이다. 복잡하게 생각했지만 결국 for문의 범위를 잘 설정해줘야 하는 문제였다.
문자열이 "abcde" 일 때의 경우
["a", "b", "cde"], ["a", "bc", "de"], ["a", "bcd", "e],
["ab", "c", "de"], ["ab", "cd", "e"],
["abc", "d", "e"]
-> 각각의 문자열 배열을 저장할 List 생성해서 대입
Score Set에 들어갈 원소들
["a", "ab", "abc", "b", "bc", "bcd", "c", "cd", "cde", "d", "de", "e"]
-> 각각의 문자열 배열을 생성할 때 Set에도 저장
-> TreeSet으로 만들면 중복제거, 정렬이 같이 된다.
✨ 풀이
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
TreeSet<String> score = new TreeSet<>(); // 점수 목록을 담는 TreeSet 중복 없애고, 사전순 정렬
ArrayList<String[]> wordList = new ArrayList<>(); // String[] 을 담는 ArrayList 생성
int N = scanner.nextInt();
String S = scanner.next();
for (int i = 1; i < N; i++) { // substring(0, 1)부터 시작해야 제일 처음 문자 저장할 수 있음
for (int j = i + 1; j < N; j++) {
String first = S.substring(0, i);
String second = S.substring(i, j);
String third = S.substring(j);
wordList.add(new String[]{first, second, third}); // 만들어지는 조합들 wordList에 저장
score.add(first); // 점수표에도 저장
score.add(second);
score.add(third);
}
}
ArrayList<String> scoreList = new ArrayList<>(score); // 인덱스로 점수계산을 해야하기 때문에 List에 옮겨준다.
int max = -1;
for (String[] s : wordList) { // wordList의 문자열 배열들을 하나씩 조회
int sum = 0;
for (int i = 0; i < s.length; i++) {
sum += (scoreList.indexOf(s[i]) + 1); // indexOf를 쓰면 어느 인덱스인지 확인할 수 있음
}
max = Math.max(max, sum); // max값을 계속 갱신해서 최대값을 찾음
}
System.out.println(max);
}
}