[C++] 가장 가까운 같은 글자

2023. 6. 22. 13:54·[게임 개발] 알고리즘 공부/프로그래머스

https://school.programmers.co.kr/learn/courses/30/lessons/142086%EF%BB%BF

 

프로그래머스

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

programmers.co.kr

난이도 : Lv. 1

 

문제

문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다.
예를 들어, s="banana"라고 할 때,  각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다.

  • b는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • a는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • n은 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • a는 자신보다 두 칸 앞에 a가 있습니다. 이는 2로 표현합니다.
  • n도 자신보다 두 칸 앞에 n이 있습니다. 이는 2로 표현합니다.
  • a는 자신보다 두 칸, 네 칸 앞에 a가 있습니다. 이 중 가까운 것은 두 칸 앞이고, 이는 2로 표현합니다.

따라서 최종 결과물은 [-1, -1, -1, 2, 2, 2]가 됩니다.

문자열 s이 주어질 때, 위와 같이 정의된 연산을 수행하는 함수 solution을 완성해주세요.

코드
#include <string>
#include <vector>

using namespace std;

vector<int> solution(string s) 
{
    vector<int> answer;
    answer.push_back(-1);
    
    for(int i = 1; i < s.size(); i++)
    {
        bool isMatched = false;
        for(int j = i-1; j >= 0; j--)
        {
            if(s[i] == s[j])
            {
                answer.push_back(i-j);
                isMatched = true;
                break;
            }                      
        }
            if(!isMatched)
            answer.push_back(-1);
    }
    
    return answer;
}
풀이

문자열 s의 첫번째 인덱스는 비교할 자신보다 앞에 있는 인덱스가 없으니 반복문 시작 전에 -1을 pushback 한다.

 

이후 이중for문을 통하여 첫번째 반복에서는 모든 문자를 탐색하며,

두번째 반복문에서는 특정 인덱스의 문자와 그 인덱스보다 작은 인덱스를 가진 문자를 비교하여

같은 값이 있다면 두 인덱스를 빼서 얼마나 멀리 떨어져 있는지 값을 구한다.

그 후 bool변수를 true로 설정하고

만약 같은 값이 발견되지 않았다면 조건에 의해서 -1을 pushback한다.

저작자표시 (새창열림)

'[게임 개발] 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글

[C++] 완주하지 못한 선수  (0) 2023.07.07
[C++] 2021 카카오 채용연계형 인턴십 - 숫자 문자열과 영단어  (0) 2023.06.24
[C++] 2018 KAKAO BLIND RECRUITMENT[1차] 비밀지도  (0) 2023.06.23
[C++] 2023 KAKAO BLIND RECRUITMENT개인정보 수집 유효기간  (0) 2023.05.21
[C++] 2021 Dev-Matching: 웹 백엔드 개발자(상반기)로또의 최고 순위와 최저 순위  (0) 2023.05.19
'[게임 개발] 알고리즘 공부/프로그래머스' 카테고리의 다른 글
  • [C++] 2021 카카오 채용연계형 인턴십 - 숫자 문자열과 영단어
  • [C++] 2018 KAKAO BLIND RECRUITMENT[1차] 비밀지도
  • [C++] 2023 KAKAO BLIND RECRUITMENT개인정보 수집 유효기간
  • [C++] 2021 Dev-Matching: 웹 백엔드 개발자(상반기)로또의 최고 순위와 최저 순위
람팜팜~
람팜팜~
:)
  • 람팜팜~
    RumPumPum
    람팜팜~
  • 전체
    오늘
    어제
    • 전체 (123)
      • 🎵 일상 (2)
      • JAVA (5)
        • 김영한의 자바 입문 (3)
      • JavaScript (12)
      • ---------------------------.. (0)
      • [게임 개발] 포트폴리오 (2)
        • RPG (1)
        • 슈터-플랫포머 (1)
      • [게임 개발] 개발 일지 (28)
        • RPG (25)
        • TopDownProject (3)
      • [게임 개발] 언리얼엔진 공부 (9)
        • 이득우의 언리얼 프로그래밍 Part.1 (6)
        • 이득우의 언리얼 프로그래밍 Part.2 (1)
        • 개인 메모 (2)
      • [게임 개발] 알고리즘 공부 (60)
        • 프로그래머스 (8)
        • 백준 (52)
        • 개인 메모 (0)
      • [게임 개발] CPP 공부 (2)
        • 이것이 C++ 이다 (1)
        • Effective C++ (0)
        • Effective Modern C++ (0)
        • 홍정모 그래픽스 새싹코스 (1)
      • [게임 개발] CS 공부 (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      문자열
      메모리구조
      우선순위 큐
      역참조
      해시
      그리디
      누적합
      브루트포스
      프로세스
      context switching
      dfs
      dp
      투포인터
      슬라이딩 윈도우
      스레드
      참조자
      데드락
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    람팜팜~
    [C++] 가장 가까운 같은 글자
    상단으로

    티스토리툴바