[프로그래머스 | C#] 크기가 작은 부분 문자열 TryParse
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