[백준 2607][C++] 비슷한 단어

2023. 8. 11. 19:13·코딩 공부/백준(C++)

문제 링크

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


◆문제 해결 및 설명◆

문제 :  같은 문자로 같은 개수로 이루어져 있다면 "같은 구성을 갖는다" 라고 하고 이 상태거나, 이 상태에서 하나 더 문자가 있거나, 하나만 다르거나, 하나가 적을 때의 개수를 첫번째 문자열과 비교하여 몇개의 문자열이 그러한지 답하라.

 

처음에는 이중 반복문을 통해서 문자열의 문자 하나하나를 비교해서 같다면 sameCount 변수에 +1을 해주었다.

 

이후 아래의 상황에 맞게 answer++를 해주었다.

  1. 첫번째 문자열의 size()와 sameCount가 같고, 비교 문자열의 size() 와 sameCount가 같다면 (같은 구성)
  2. 첫번째 문자열의 size() 와 sameCount가 같고, 비교 문자열의 size() 와 sameCount + 1 이 같다면 (하나 길면)
  3. 첫번째 문자열의 size() 와 sameCount + 1 이 같고, 비교 문자열의 size() 와 sameCount가 같다면 (하나 적으면)
  4. 첫번째 문자열의 size() 와 sameCount + 1 이 같고, 비교 문자열의 size() 와 sameCount + 1 이 같다면 (하나 다르면)

바로 실패... 생각해보니 단순한 이중 반복문으로는 문자열을 비교할때 어떤 문자열이 비교 되었는지 기록하지 못하는 점을 발견 하였다.

  •  ex) GOG, GA : first string size = 3 , second string size = 2 , sameCount = 2 //3번에 해당

따라서 비교 중 하나의 문자가 같다고 판단될때 문자의 위치에 해당하는 배열의 값을 1로 만들어주는 배열을 선언하였다.

        // 첫 번째 문자열이 어느 부분이 같은지 저장하는 배열
        vector<int> sameCountArray(array[0].size(), 0);
        // 도 번째 문자열이 어느 부분이 같은지 저장하는 배열
        vector<int> sameCheckArray(array[i].size(), 0);
        int sameCount = 0;

        for (int k = 0; k < array[0].size(); k++)
        {
            for (int x = 0; x < array[i].size(); x++)
            {
                if (sameCheckArray[x] || sameCountArray[k])
                {
                    continue;
                }
                if (array[0][k] == array[i][x])
                {
                    sameCountArray[k] = 1;
                    sameCheckArray[x] = 1;
                }
            }
        }

 

◆코드 전문◆

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

int main()
{
    int N, answer = 0;
    cin >> N;
    cin.get();

    vector<string> array(N);
    for (int i = 0; i < N; i++)
    {
        getline(cin, array[i]);
    }

    bool b_Same = true;
    for (int i = 1; i < N; i++)
    {
        // 첫 번째 문자열이 어느 부분이 같은지 저장하는 배열
        vector<int> sameCountArray(array[0].size(), 0);
        // 도 번째 문자열이 어느 부분이 같은지 저장하는 배열
        vector<int> sameCheckArray(array[i].size(), 0);
        int sameCount = 0;

        for (int k = 0; k < array[0].size(); k++)
        {
            for (int x = 0; x < array[i].size(); x++)
            {
                if (sameCheckArray[x] || sameCountArray[k])
                {
                    continue;
                }
                if (array[0][k] == array[i][x])
                {
                    sameCountArray[k] = 1;
                    sameCheckArray[x] = 1;
                }
            }
        }

        for (int k = 0; k < sameCountArray.size(); k++)
        {
            sameCount += sameCountArray[k];
        }

        // 같은 구성
        if (array[0].size() == sameCount && array[i].size() == sameCount)
        {
            answer++;
        }
        // 하나 많을 때
        else if (array[0].size() == sameCount && array[i].size() == sameCount + 1)
        {
            answer++;
        }
        // 하나 적을 때
        else if (array[0].size() == sameCount + 1 && array[i].size() == sameCount)
        {
            answer++;
        }
        // 하나 다를 때
        else if (array[0].size() == sameCount + 1 && array[i].size() == sameCount + 1)
        {
            answer++;
        }
    }
    cout << answer;
}

'코딩 공부 > 백준(C++)' 카테고리의 다른 글

[백준 10942][C++] 팰린드롬?  (0) 2023.08.11
[백준 1911][C++] 흙길 보수하기  (0) 2023.08.11
[백준 15686][C++] 치킨 배달  (0) 2023.08.09
[백준 9658][C++] 돌 게임 4  (0) 2023.08.09
[백준 16974][C++] 레벨 햄버거  (0) 2023.08.07
'코딩 공부/백준(C++)' 카테고리의 다른 글
  • [백준 10942][C++] 팰린드롬?
  • [백준 1911][C++] 흙길 보수하기
  • [백준 15686][C++] 치킨 배달
  • [백준 9658][C++] 돌 게임 4
메카인
메카인
  • 메카인
    메카인의 지식창고
    메카인
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 코딩 공부
        • TIL(Today I Learn)
        • TIL
        • 백준(C++)
        • Python
        • 알고리즘
        • 프로젝트 회고
      • C++
        • C++
        • C++ STL
        • C,C++ mCoding yotube
      • 게임개발
        • 언데드서바이벌_골드메탈_클론코딩
        • 3D_골드메탈_클론코딩
        • 유니티_문제해결
        • 게임 수학
      • Unreal 공부
        • UE5 GameDev
        • Unreal Engine 4 C++ The Ult..
      • 교재 문제 풀이
        • 운영체제
      • 정보처리기사
        • 정처기 요약
        • 정처기 오답노트
      • 학교수업
        • 데이터베이스
        • 프로그래밍 언어론
        • 리눅스 시스템
        • 네트워크
      • 일상
        • 주식
        • 독서
      • (비공개 전용)
        • memory
        • Build
        • OOP
        • Smart Pointer
        • lamda
        • 게임 수학
        • 모던 C++
        • 모던 C++ STL
        • 모던 C++ Concurrency, Paralle..
        • 책
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 블로그 관리
  • 링크

  • 공지사항

    • 공지사항 - 인생과 블로그의 목표
  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
메카인
[백준 2607][C++] 비슷한 단어
상단으로

티스토리툴바