meong_j
기록하는 습관.
meong_j
전체 방문자
오늘
어제
  • 분류 전체보기 (176)
    • 개인 공부 정리 (0)
    • 서버 운영 (37)
      • Linux (36)
    • Frontend (11)
      • Vue.js (10)
    • Backend (70)
      • Java (4)
      • Python (22)
      • Django (38)
      • Spring (6)
    • Database (5)
      • Oracle (4)
      • MySQL (1)
      • MariaDB (0)
    • Android (14)
      • Kotlin (6)
    • 배포 (9)
      • Docker (8)
      • AWS (1)
    • IT_study (29)
      • Coding test (17)
      • 알고리즘 (5)
      • 스터디 (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • github

인기 글

반응형

태그

  • 안드로이드adaptor
  • DHCP
  • 코틀린자료형
  • 개발자도서
  • 리눅스방화벽
  • Proxy
  • router-link
  • 이차원배열정렬
  • django
  • 배포인프라
  • 중첩라우트
  • cpu사용률
  • gabagecollecter
  • Kotlin
  • dp #알고리즘
  • docker
  • SASS Variables
  • 리눅스인증
  • dockersecret
  • 테크커리어

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.
meong_j

기록하는 습관.

IT_study/Coding test

[Coding test Basic with c++] Anagram(아나그램 : 구글 인터뷰 문제)

2021. 12. 25. 13:20
728x90
반응형

문제

Anagram이란 두 문자열이 알파벳의 나열 순서를 다르지만 그 구성이 일치하면 두 단어는 아 나그램이라고 합니다.
예를 들면 AbaAeCe 와 baeeACA 는 알파벳을 나열 순서는 다르지만 그 구성을 살펴보면 A(2), a(1), b(1), C(1), e(2)로 알파벳과 그 개수가 모두 일치합니다.
즉 어느 한 단어를 재 배열하면 상대편 단어가 될 수 있는 것을 아나그램이라 합니다.
길이가 같은 두 개의 단어가 주어지면 두 단어가 아나그램인지 판별하는 프로그램을 작성하세 요. 아나그램 판별시 대소문자가 구분됩니다.


▣ 입력설명 첫 줄에 첫 번째 단어가 입력되고, 두 번째 줄에 두 번째 단어가 입력됩니다.
단어의 길이는 100을 넘지 않습니다.

▣ 출력설명 두 단어가 아나그램이면 “YES"를 출력하고, 아니면 ”NO"를 출력합니다.

 

입력 예제

AbaAeCe
baeeACA

 

출력 예제

YES

 

 

풀이

#include<stdio.h>
#inclue<algorithm>
using namespace std;

int a[60], b[60];

int main(){

	char str[100];
	int i;
	scanf("%s", &str); 
	 
	for(i=0; str[i]!='\0'; i++){
		if(str[i]>=65 && str[90]<=90){ //대문자 
			a[str[i]-64]++; //대문자A면 65인데 64를 빼서 1번에 대문자A를 저장 
		}else {//소문자 
			a[str[i]-70]++;
		}
	}
	
	scanf("%s", &str); 
	
	for(i=0; str[i]!='\0'; i++){
		if(str[i]>=65 && str[90]<=90){
			b[str[i]-64]++;
		}else {
			b[str[i]-70]++;
		}
	}
	
	
	for(i=1; i<=52; i++){
		if(a[i]!=b[i]) {
			prinf("NO\n");
			exit(0); //inclue<algorithm> 필요 
		}
	}
	printf("YES\n");
	
   	return 0;
    
}

 

[풀기전 알아야 할 정보]

* 아스키 코드값
대문자 (A-Z) : 65~90
소문자 (a-z) : 97~122 (대문자+32)

* 대문자, 소문자의 개수
각 각 26개로, 총 52개

 

첫번째 입력값을 str 배열에 먼저 담고,

a라는 배열 1번부터 26번째까지 알파벳 대문자 A부터 Z까지 담고, 27번째부터 52번째까지 소문자 a부터 z 의 개수를 담는다.

단, 입력값은 아스키 코드 값으로 저장되어지니 대문자는 65부터 90번째로 a[1]에 담기위해선 64를 빼면 된다. (A=65)

소문자는 97번째부터로 a[27]부터 소문자 a 부터 담으면 되니 70을 빼면 된다. (a=97)

b배열도 마찬가지로 담고,  배열 a와 b를 52배열 비교해서 다르면 "NO" 로 return 후 종료시킨다. 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'IT_study > Coding test' 카테고리의 다른 글

[코딩테스트 / c++] Least Recently Used(2018 카카오 캐시 문제 변형)  (0) 2022.01.02
[Coding test Basic with c++] N!의 표현법  (0) 2021.12.27
[Coding test Basic with c++] 자릿수의 합  (0) 2021.12.21
[Coding test Basic with c++] 모두의 약수  (0) 2021.12.21
[Coding test Basic with c++] 올바른 괄호  (0) 2021.12.16
    'IT_study/Coding test' 카테고리의 다른 글
    • [코딩테스트 / c++] Least Recently Used(2018 카카오 캐시 문제 변형)
    • [Coding test Basic with c++] N!의 표현법
    • [Coding test Basic with c++] 자릿수의 합
    • [Coding test Basic with c++] 모두의 약수
    meong_j
    meong_j
    #it #개발일기 #개발공부 #개발자 #백앤드 #생각정리 #시간은 실력에 비례한다 #뭐든지 꾸준히 열심히 #오늘의 내가 내일의 나를 만든다

    티스토리툴바