[C++] 백준 13019번: A를 B로

2023. 2. 28. 20:10·problem solving/백준

🔗 문제

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

 

13019번: A를 B로

첫째 줄에 A, 둘째 줄에 B가 주어진다. 두 문자열의 길이는 같으며, 길이는 50을 넘지 않는다. 또, 알파벳 대문자로만 이루어져 있다.

www.acmicpc.net

 

🖍 풀이

 

solve() : A와 B의 구성요소 유무로 가능성 확인

  • A와 B의 문자열 길이가 같아야 한다.
  • A와 B를 정렬했을 때 서로 같아야 한다. 같은 문자 구성이라면 정렬했을 때 똑같다!
    • 문자열 길이가 짧아서 정렬해도 시간 초과 없음

 

solve2()

A와 B 문자열을 뒤에서부터 같은지 확인하며 다른 문자열이 나오면 ++result

  • 각 A, B의 뒤를 가르키는 포인터 aptr, bptr를 만들고 서로 같을 때까지 aptr을 왼쪽으로 이동
  • 두 포인터 중 하나라도 문자열 범위를 벗어나면 종료하고 result를 출력한다.

 

먼저 solve()로 구성이 아예 불가능한지 확인한 후, solve2()를 돌려주었다.

 

💾  소스

#include <iostream>
#include <string>
#include <algorithm>

bool solve(std::string A, std::string B) // 일부러 복사 파라미터 사용
{
    if(A.size() != B.size()) // 길이 확인
        return false;
    
    std::sort(A.begin(), A.end());
    std::sort(B.begin(), B.end());
    
    for(int i=0; i<A.size(); ++i) // 문자 구성 확인
    {
        if(A[i] != B[i])
        {
            return false;
        }
    }
    
    return true;
}

int solve2(std::string& A, std::string& B)
{
    int result = 0;
    int aptr, bptr;

    aptr = bptr = A.length()-1;
    
    while(bptr >=0 && aptr >=0)
    {
        if(A[aptr] != B[bptr])
        {
            --aptr;
            ++result;
        }
        else
        {
            --aptr; --bptr;
        }
    }

    return result;
}

int main()
{
    std::string A, B;
    std::cin >> A >> B;
    
    
    std::cout << (solve(A, B) ? solve2(A, B) : -1);
    
    return 0;
}

 

저작자표시 비영리 변경금지 (새창열림)
'problem solving/백준' 카테고리의 다른 글
  • [C++] 백준 22868번: 산책 (small)
  • [C++] 백준 16918번: 봄버맨
  • [C++] 백준 16987번: 계란으로 계란치기
  • [C++] 백준 1103번: 게임
u1qns
u1qns
http://github.com/u1qns
  • u1qns
    개발 블로그
    u1qns
  • 전체
    오늘
    어제
    • 분류 전체보기 (173) N
      • 회고 (1)
      • programming (17)
        • 개념 정리 (6)
        • CI CD (1)
        • 트러블 슈팅 (0)
        • 환경설정 및 팁 (7)
      • problem solving (155) N
        • 개념 정리 (3)
        • 백준 (129) N
        • SWEA (15)
        • 프로그래머스 (4)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    cpp
    DFS
    되추적
    그리디
    SSAFY수료식
    POW
    SSAFY
    cmath
    미해결
    DP
    HELLOSSAFY
    투포인터
    완전탐색
    BFS
    C++
    boj
    백준
    삼성청년SW아카데미
    구현
    SWEA
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
u1qns
[C++] 백준 13019번: A를 B로
상단으로

티스토리툴바