티스토리 뷰
https://www.acmicpc.net/problem/1120
문제
길이가 N으로 같은 문자열 X와 Y가 있을 때, 두 문자열 X와 Y의 차이는 X[i] ≠ Y[i]인 i의 개수이다. 예를 들어, X=”jimin”, Y=”minji”이면, 둘의 차이는 4이다.
두 문자열 A와 B가 주어진다. 이때, A의 길이는 B의 길이보다 작거나 같다. 이제 A의 길이가 B의 길이와 같아질 때 까지 다음과 같은 연산을 할 수 있다.
- A의 앞에 아무 알파벳이나 추가한다.
- A의 뒤에 아무 알파벳이나 추가한다.
이때, A와 B의 길이가 같으면서, A와 B의 차이를 최소로 하는 프로그램을 작성하시오.
입력
첫째 줄에 A와 B가 주어진다. A와 B의 길이는 최대 50이고, A의 길이는 B의 길이보다 작거나 같고, 알파벳 소문자로만 이루어져 있다.
출력
A와 B의 길이가 같으면서, A와 B의 차이를 최소가 되도록 했을 때, 그 차이를 출력하시오.
문제 이해
두 문자열의 차이는 문자 배열의 자리에 위치하는 알파벳이 다른 경우를 뜻한다. 이러한 조건에서 문자열 A와 B를 줌으로써 A를 B의 길이와 동일하게 만들면서 문자열의 차이를 최소화하는 문제인 것 같다.
문제 해결
1. 앞에 문자를 추가해야하는 경우
2. 뒤에 문자를 추가해야하는 경우
이 두 갈래로 문제를 나눌 수 있다. 그렇다면 그냥 문자열 A를 문자열 B에 대칭해보며 가장 차이가 작은 값이 나올 때를 기준으로 문자열의 앞뒤가 비는만큼 계산하면 되는 것 아니냐라는 생각이 들었다.
#include <iostream>
#include <algorithm>
#define INF 123456789
using namespace std;
string A, B;
int res = INF, minV;
int main(void) {
cin >> A >> B;
for(int i = 0; i <= B.length() - A.length(); i++) {
minV = 0;
for(int j = 0; j < A.length(); j++) {
if(B[i + j] != A[j]) {
minV++;
}
}
res = min(minV, res);
}
cout << res << '\n';
return 0;
}
'Algorithm > baekjoon' 카테고리의 다른 글
1049_기타줄_그리디 알고리즘 (0) | 2020.08.03 |
---|---|
1946_신입 사원_그리디 알고리즘 (0) | 2020.08.02 |
2875_대회 or 인턴_그리디 알고리즘 (0) | 2020.08.02 |
10610_30_그리디 알고리즘 (0) | 2020.08.02 |
1541_잃어버린 괄호_그리디 알고리즘 (0) | 2020.08.01 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- codeit
- call by value
- inflearn
- 비트필드
- 구조체
- 프로그래밍
- 다차원 배열
- 공간복잡도
- 자료구조
- 2차원 배열
- call by reference
- C
- 형승격
- 회전리스트
- 3차원 배열
- Algorithm
- 시간복잡도
- 파이썬
- 재귀함수
- 알고리즘
- 공부
- 공용체
- 종류
- timecomplexity
- 간접 지정
- 포인터
- 강의
- 배열
- 1차원 배열
- 직접 지정
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함