[백준 BOJ] 1919번 애너그램 만들기 (C언어)

2022. 1. 9. 17:01PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/1919

 

1919번: 애너그램 만들기

두 영어 단어가 철자의 순서를 뒤바꾸어 같아질 수 있을 때, 그러한 두 단어를 서로 애너그램 관계에 있다고 한다. 예를 들면 occurs 라는 영어 단어와 succor 는 서로 애너그램 관계에 있는데, occurs

www.acmicpc.net

백준 BOJ 1919번 애너그램 만들기 문제 사진

 

접근 방법 - 문자열을 이용한 수학 문제

백준 1919번 문제는 문자열을 이용한 수학적 사고력 문제라 볼 수 있다.

위 문제에선, 알파벳의 배치만 다른 2개 단어의 관계를 애너그램 관계라 말하고 있다.

이는 곧, 2개의 단어에 사용되는 문자와 각 문자가 사용되는 개수가 서로 동일하다고도 해석할 수 있다.

따라서, 필자는 2개의 단어에서 제거가 필요 없는, 즉 "2개의 단어에 동일하게 존재하는 문자를 제외한" 총문자의 개수가 정답이라 생각하였다.

필자는 이를 이용해서 문제를 해결하였다. 아래의 실행 순서를 참고해보길 바란다.

 

코드의 실행 순서

1) 2개의 단어 입력받은 뒤, 2개의 단어 길이를 합한 sum 변수 만들기

 

2) 이중 반복문으로 2개의 단어 동시 탐색

만약 2개의 단어에서 서로 같은 문자를 발견했을 시, 2개의 문자를 겹치지 않을 임의의 문자로 각 배열 값을 변경

그리고 sum에서 2를 감소시킨다.

 

3) 연산이 끝난 뒤, sum을 출력하고 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>
#include <string.h>

//백준 1919번 코드
char a[1000], b[1000];
int main() {
	scanf("%s %s", &a, &b);

	int sum = strlen(a) + strlen(b);
	for (int i = 0; i < strlen(a); i++) {
		for (int j = 0; j < strlen(b); j++) {
			if (a[i] == b[j]) {
				a[i] = -1;	b[j] = -2;
				sum -= 2;
			}
		}
	}
	printf("%d", sum);
}

 

제출 결과

백준 BOJ 1919번 애너그램 만들기 문제 C 제출 결과

(2021.12.24 백준 1919번 제출 결과)

(크리스마스이브 ps라... 하아아...)

반응형