[C++] SWEA 1257번: K번째 문자열 (set 활용)

2022. 12. 22. 17:09·problem solving/SWEA

🔗 문제

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV18KWf6ItECFAZN

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

🖍 풀이

set 라이브러리의 특성을 이용하면 쉽게 풀 수 있다.

set은 중복을 제외하고, 오름차순으로 자동 정렬해주는 특성이 있다.


먼저 문자열을 다 쪼개어서 저장해준다.

substr(i, j)

i 위치에서부터 j개를 자르는 substr 함수

for(int i=0; i<str.size(); ++i)
{
    for(int **j=1**; **i+j<=str.size()**; ++j)
    {
        set.insert(str.substr(i, j));
    }
}

j는 공백을 빼기 위해서 0이 아니라 1부터 시작하고 원문의 사이즈를 넘지 않도록 i+j < str.size() 조건을 걸어주었다.

 

 

love를 예로 들었을 때 반복문마다 저장되는 값

i=0 → {l, lo, lov}
i=1 → {o, ov, ove}
i=3 → {v, ve}
i=4 → {e}

눈치 챘을지 모르겠지만 love 원문이 빠져있다. 따로 삽입해주었고 혹시 모를 공백도 제거했다.

 

set.insert(str);
set.erase("");

set은 자동으로 오름차순 정렬해주기 때문에 이터레이터를 이용해서 N번째를 출력만 해주면 된다.

 

💾  소스

#include <iostream>
#include <string>
#include <vector>
#include <set>

int main()
{
    int T, N;
    std::string str, answer;
    
    std::cin >> T;
    for(int tc=1; tc<=T; ++tc)
    {
        std::cin >> N >> str;
        std::set<std::string> set;
        
        for(int i=0; i<str.size(); ++i)
        {
            for(int j=1; i+j<=str.size(); ++j)
            {
                set.insert(str.substr(i, j));
            }
        }
        
        set.insert(str);
        set.erase("");
        
        if(set.size() < N)
            answer = "none";
        else
        {
            auto iter = set.begin();
            for(int i=0; i<N; ++i)
            {
                iter++;
            }
            answer = *(--iter);
        }
        
        //output
        std::cout << '#' << tc << ' ' << answer << '\\n';
    }
    return 0;
}
저작자표시 비영리 변경금지 (새창열림)
'problem solving/SWEA' 카테고리의 다른 글
  • [C++] SWEA 1251번: 단순도금비용
  • [C++] SWEA 1249번: 보급로
  • [C++] SWEA 1244번: 최대상금
  • [C++] SWEA 1234번: 비밀번호
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)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
u1qns
[C++] SWEA 1257번: K번째 문자열 (set 활용)
상단으로

티스토리툴바