[JAVA/SWEA] 10202: 문자열 동화

👀 문제

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXMCa8EaVioDFAWv

👊 도전

1. 설계

  1. 세 문자열의 i번째 문자가 모두 같은 경우, 하나만 다른 경우, 다 다른 경우를 따진다.

2. 구현

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
32
33
import java.util.*;
/**
 *
 * @author HEESOO
 *
 */
class Solution
{
	public static void main(String args[]) throws Exception
	{
		Scanner sc = new Scanner(System.in);
		int T;
		T=sc.nextInt();

		for(int test_case = 1; test_case <= T; test_case++)
		{
			int n=sc.nextInt();
			char[] a=sc.next().toCharArray();
			char[] b=sc.next().toCharArray();
			char[] c=sc.next().toCharArray();
			
			int answer=0;
			for(int i=0;i<n;i++) 
			answer+=frequency(a[i], b[i], c[i]);
			System.out.println("#"+test_case+" "+answer);
		}
	}
	public static int frequency(char a, char b, char c) {
		if(a==b && b==c && c==a) return 0;
		else if(a!=b && b!=c && c!=a) return 2;
		else return 1;
	}
}

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. i번째 문자가 같은 개수에 따라 조건을 나눈다
    • String a, b, c의 i번째 문자열 비교를 쉽게 하기 위해 char형 배열에 저장한다.
    • for문으로 i번째 문자를 체크한다.
    • i번째가 모두 같다면 바꿀 필요가 없으므로 0
    • 하나만 다르다면 그것을 바꾸면 되므로 1
    • 모두 다르다면 특정 하나를 제외한 나머지 두 개를 바꿔야 하므로 2이다.
    • 해당 개수만큼 바꿔야할 최소 숫자를 더한 후, 출력한다.

👏 해결 완료!