Machineboy空
Excercism - ISBN Verifier : 문자열 다루기 Split, Concat, Replace, IsDigit 본문
Computer/Coding Test
Excercism - ISBN Verifier : 문자열 다루기 Split, Concat, Replace, IsDigit
안녕도라 2025. 2. 13. 12:28문제요약
유효한 ISBN 문자인지 확인하라.
https://exercism.org/tracks/csharp/exercises/isbn-verifier
ISBN Verifier in C# on Exercism
Can you solve ISBN Verifier in C#? Improve your C# skills with support from our world-class team of mentors.
exercism.org
난이도
Medium
풀이 포인트
- 문자열 다루기
//Split
string[] strs = str.Split('-');
//Replace
string str1 = str.Replace("-","");
//Concat
string str2 = string.Concat(strs);
- 문자 숫자 변환
char c = '8';
// 문자(char)에서 숫자(int)변환
Int.Parse(c.ToString()); // 8
// 문자(char)가 숫자인지 확인
char.IsDigit(c) // true
REVIEW
문자열을 자유자재로 다루는 것이 아직 부족하다.
3-598-21507-X 형태의 문자에서 -를 제외하고 규칙에 따라 셈을 해 주어야 하는데,
나는 - 기준으로 문자열을 split한 후에 다시 concat으로 문자열을 이어준 다음 나머지 연산을 해 주었고,
모범풀이 1에서는 replace("-","")로 아예 원본 문자열을 변형하였으며,
모범풀이 2에서는 문자열을 따로 만들지 않고, 현재 탐색하는 문자열이 -라면 넘어가는 식으로 구현하였다.
문자열에 대한 능숙도에 따라 코드가 이렇게 너저분해질 수 있음..
CODE
//나의 너저분 풀이
using System;
public static class IsbnVerifier
{
public static bool IsValid(string number)
{
string[] numChunks = number.Split('-');
string onlyNum = string.Concat(numChunks);
if(onlyNum.Length != 10) return false;
string onlyNum9 = onlyNum.Substring(0, 9);
int a = 10, sum = 0;
foreach(char c in onlyNum9){
int num = -1;
if(c <= 'Z' && c >= 'A'){
return false;
}
else
{
num = int.Parse(c.ToString());
}
sum += num * a;
a--;
}
if(onlyNum[9] == 'X')
{
sum += 10;
}else{
if(onlyNum[9]<='9' && onlyNum[9] >= '0')
{
sum += int.Parse(onlyNum[9].ToString());
}else{
return false;
}
}
return sum%11 == 0;
}
}
using System;
public static class IsbnVerifier
{
public static bool IsValid(string number)
{
int idx = 10, sum = 0;
foreach (char ch in number)
{
if (ch == '-')
continue;
if (idx == 0 || (ch == 'X' && idx != 1))
return false;
if (!char.IsDigit(ch) && ch != 'X') // 🔹 숫자가 아니고 'X'도 아니면 잘못된 입력!
return false;
int num = ch == 'X' ? 10 : ch - '0';
sum += num * idx--;
}
return sum % 11 == 0 && idx == 0;
}
}
'Computer > Coding Test' 카테고리의 다른 글
Excercism - BookStore 조합 (1) | 2025.02.14 |
---|---|
Exercism - Pascal's Triangle 파스칼 삼각형 (0) | 2025.02.13 |
Excercism - Sublist 슬라이딩 윈도우 (0) | 2025.02.12 |
Excercism - UTC 세계협정시 DateTime, TimezoneInfo, CultureInfo (0) | 2025.02.11 |
Excercism - Hyper-optimized Telemetry 정수형 (0) | 2025.02.11 |