본문 바로가기
코딩테스트/Cos Pro 1급 Java

[Cos Pro 1급 java] [3차] 문제4) 중복 문자열 이어붙이기

by drCode 2021. 3. 17.
728x90
반응형

안녕하세요

 

이번 포스팅은 Cos Pro 1급 3차 기출 중 4번 문제인 중복 문자열 이어 붙이기를 풀어보겠습니다.

 

□ 문제설명

두 문자열 s1과 s2를 붙여서 새 문자열을 만들려 합니다. 이때, 한 문자열의 끝과 다른 문자열의 시작이 겹친다면, 겹치는 부분은 한 번만 적습니다.

예를 들어 s1 = "ababc", s2 = "abcdab"일 때, 아래와 같이 s1 뒤에 s2를 붙이면 새 문자열의 길이는 9입니다.


그러나 s2 뒤에 s1을 붙이면 새 문자열의 길이는 8로, 더 짧게 만들 수 있습니다.

두 문자열 s1과 s2가 매개변수로 주어질 때, s1과 s2를 붙여서 만들 수 있는 문자열 중, 가장 짧은 문자열의 길이를 return 하도록 solution 함수를 완성해주세요.


□ 매개변수 설명

두 문자열 s1과 s2가 solution 함수의 매개변수로 주어집니다.

  • s1과 s2의 길이는 1 이상 100 이하입니다.
  • s1과 s2는 알파벳 소문자로만 이루어져 있습니다.

□ 예시

s1 s2 return
"ababc" "abcdab" 8

□ 예시 설명

문제에 주어진 예시와 같습니다.

 

※ 문제 접근 방법

(1) 두 문자열의 길이 중 더 작은 길이의 문자열의 길이를 구합니다.

(2) s1은 문자열 끝에서부터, s2는 처음부터 i 씩 늘려가며 중첩된 부분이 많은 인덱스를 구합니다.

(3) s1에 s2의 중첩되는 부분을 제외한 나머지를 이어 붙입니다.

 

package duplicatedStringConcat;

public class DuplicatedStringConcat {
	public static void main(String[] args) {
		Main sol = new Main();
		String s1 = new String("ababc");
		String s2 = new String("abcdab");
		int ret = sol.solution(s1, s2);

		// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
		System.out.println("solution 메소드의 반환 값은 " + ret + " 입니다.");
	}
}

class Main {
	public int solution(String s1, String s2) {
		int answer = 0;
		int len = Math.min(s1.length(), s2.length());
		int idx = 0;
		
		for (int i = 0; i < len; i++) {
			String sub1 = s1.substring(s1.length() - i -1, s1.length() - 1);
			String sub2 = s2.substring(0, i);
			if(sub1.equals(sub2)) idx = i;
		}
		
		answer = s1.concat(s2.substring(idx, s2.length()-1)).length();
		
		return answer;
	}
}
728x90
반응형

댓글