코딩테스트

C# 알고리즘 - 가장 가까운 같은 글자

작성자 정보

  • 마스터 작성
  • 작성일

컨텐츠 정보

본문

[문제 설명]

문자열 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을 완성해주세요. 

 

[제한사항]

1 ≤ s의 길이 ≤ 10,000

s은 영어 소문자로만 이루어져 있습니다.

 

[입출력 예]

 

[입출력 예 설명]

입출력 예 #1

지문과 같습니다.


입출력 예 #2

설명 생략 

 

[코드]

using System;


public class Solution {

    public int[] solution(string s) {

        int[] answer = new int[s.Length];

        for(int i=0; i<s.Length; i++)

        {

            int index = -1;

            for(int j = i - 1; j >= 0; j--)

            {

                if(s[i] == s[j])

                {

                    index = i - j;

                    break;

                }

            }

            answer[i] = index;

        }

        return answer;

    }

}

 

[풀이]

1. answer의 크기 정하기

int[] answer = new int[s.Length];

 

2. 매개변수 s의 길이만큼 for문 돌리기

for(int i=0; i<s.Length; i++)

 

3. answer 대입할 변수 선언

int index = -1; 

 

4. for문 한번 더 돌리기 (같은 수 체크 확인용)

s[i]와 s[j]가 같으면 index의 값 변경

for(int j = i - 1; j >= 0; j--)

{

        if(s[i] == s[j])

        {

          index = i - j;

           break;

        }

 

}

 

5. answer에 값 넣기

answer[i] = index;

 

 

[주소]

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

해당 알고리즘 문제는 프로그래머스의 알고리즘 문제입니다

관련자료

댓글 0
등록된 댓글이 없습니다.

최근글


새댓글


알림 0