알고리즘/프로그래머스 1단계

프로그래머스 - A로 B 만들기 - C++

게임만드는학생 2023. 8. 13. 13:22

https://school.programmers.co.kr/learn/courses/30/lessons/120886

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int solution(string before, string after) {
    int answer = 0;

    int arr[27] = { 0, };
    int arr2[27] = { 0, };
    for (int i = 0; i < after.length(); i++)
    {
        arr[before[i] - 97]++;
        arr2[after[i] - 97]++;
    }

    for (int i = 0; i < 27; i++)
    {
        if (arr[i] != arr2[i])return 0;
    }

    return 1;
}

 

설명

before 에 있는 알파벳들을 어떤식으로든 조합하여 after를 만들 수 있느냐를 판단해야 한다. 

따라서 before 의 각각의 알파벳 개수와 after 의 알파벳 개수를 비교하여 전부 같으면 1 아니면 0 을 리턴한다.

 

첫 for 문에서 각각의 알파벳 개수를 비교한다. 

arr[before[i]-97]++;
arr2[after[i]-97]++;

이 코드는 전부 소문자인 알파벳들을 인덱스화 시키는 것이다. 

before[i] 가 a 였다면 아스키코드로 97 이기 때문에 97을 빼면 0 이 된다. 따라서 arr[0] 을 1 증가시켜 알파벳 개수를 파악한다.

 

그리고 두 번째 for 문에서 비교하면 된다.