소소한 개발 공부

[프로그래머스 | C#] 크기가 작은 부분 문자열 TryParse 본문

프로그래밍/C#

[프로그래머스 | C#] 크기가 작은 부분 문자열 TryParse

이내내 2023. 1. 29. 17:56

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

 

프로그래머스

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

programmers.co.kr

문제

숫자로 이루어진 문자열 t와 p가 주어질 때, 

t에서 p와 길이가 같은 부분문자열들이 나타내는 수 중 p보다 작거나 같은 것이 나오는 횟수를 찾는다.

 

예를 들어, t = "123456"이고 p = "15" 라면,

부분문자열의 길이는 2(p.Length)이고

부분문자열은 "12", "23", "34", "45", "56" 이 나온다.

이 부분 문자열 중 p보다 작거나 같은 숫자 문자열은 "23", "34", "45", "56"으로 총 4개가 나온다.

 

이에 대한 코드를 작성해보자.

코드
using System;

static int Solution(string t, string p) 
{
    var answer = 0;
    long.TryParse(p, out long pInt);
    for (int index = 0; index <= t.Length - p.Length; index++)
    {
        long.TryParse(t.Substring(index, p.Length), out long value);
        if (value <= pInt) answer++;
    }
    return answer;
}

1. 먼저 부분 문자열로 나누는 연산이 필요하다. 

Substring으로 t 문자열을 p의 길이 만큼 잘라서 부분 문자열을 만든다.

이 부분문자열을 정수 형태로 비교하기 위해 long.TryParse를 사용해 long 형의 변수 value에 정수 변환 값을 넣는다.

 

2. 정수로 변환한 부분문자열이 p보다 작거나 같은지 비교한다.

미리 p를 정수로 만드는 TryParse를 수행 후 for 문에서 비교를 수행해서

작거나 같다면 반환 값을 증가시키는 연산을 수행한다.

 

TryParse

문자열을 원하는 자료형으로 파싱하는 메서드이다.

Int32의 TryParse도 있는데, 이 문제에서는 Int32의 범위를 넘는 값이 들어올 수 있어서 long을 사용했다.

보통 int.TryParse(string, out int returnvalue)로 사용한다.

 

기존에는 out 변수를 먼저 선언하고 사용하는 방식을 사용했으나

C# 버전이 올라감에 따라 C#7 에서 out 변수가 인라인화가 되었다.

// C#6 까지 사용법
int value;
int.TryParse("12345", out value);

// C#7 이후 사용법
int.TryParse("12345", out int value);

주의할 점은 당연하게도, value가 선언된 이후에 사용되어야 한다는 점이다.

 

value를 선언하지 않고,

 int.TryParse("12345", out int value); 이전에 value를 사용하면 에러가 나온다.

에러 발생: [CS0841] Cannot use local variable 'value' before it is declared