트랙
/
C#
C#
/
연습 문제
/
다이아몬드
다이아몬드

다이아몬드

어려움

지침

다이아몬드 카타는 문자 하나를 입력으로 받아 다이아몬드 모양으로 출력해요. 문자를 하나 주면 'A'로 시작하고, 주어진 문자가 가장 넓은 지점에 오는 다이아몬드를 출력해요.

요구 사항

  • 첫 번째 줄에는 'A'가 하나 들어 있어요.
  • 마지막 줄에도 'A'가 하나 들어 있어요.
  • 첫 번째와 마지막 줄을 제외한 모든 줄에는 똑같은 문자가 정확히 두 개씩 있어요.
  • 모든 줄은 앞에 오는 공백의 개수와 뒤에 오는 공백의 개수가 같아요. (0개일 수도 있어요.)
  • 다이아몬드는 좌우 대칭이에요.
  • 다이아몬드는 상하 대칭이에요.
  • 다이아몬드는 정사각형 모양이에요. (너비와 높이가 같아요.)
  • 문자들이 다이아몬드 모양을 이뤄요.
  • 위쪽 절반의 문자는 오름차순으로 놓여요.
  • 아래쪽 절반의 문자는 내림차순으로 놓여요.
  • 공백으로 채워진 네 모서리는 삼각형이에요.

예시

다음 예시에서 공백은 · 문자로 표시했어요.

'A'에 대한 다이아몬드:

A

'C'에 대한 다이아몬드:

··A··
·B·B·
C···C
·B·B·
··A··

'E'에 대한 다이아몬드:

····A····
···B·B···
··C···C··
·D·····D·
E·······E
·D·····D·
··C···C··
···B·B···
····A····

힌트

이 연습 문제의 테스트는 평소 접하는 테스트와 달라요. 보통 테스트는 주어진 입력에 대해 출력이 기대하는 값과 일치하는지 확인해요. 이것을 _값 기반 테스트_라고 해요. 하지만 이 연습 문제는 _속성 기반 테스트_를 사용해요. 속성 기반 테스트에서는 여러 입력에 대해 출력이 특정 속성을 가지는지 확인해요. 속성 기반 테스트와 값 기반 테스트를 구분하는 두 가지 중요한 차이는 다음과 같아요:

  1. 속성 기반 테스트는 하나의 입력 값이 아니라 여러 입력 값으로 동작해요.
  2. 속성 기반 테스트는 구체적인 값이 아니라 속성을 검증해요.

이 연습 문제에서 테스트는 모두 코드가 만들어야 하는 다이아몬드 모양의 속성을 검증해요. 게다가 모든 테스트는 테스트하는 속성이 모든 유효한 입력 문자('A'부터 'Z'까지)에 대해 성립하는지 확인해요.

속성 기반 테스트를 하기 위해, 이 연습 문제의 테스트는 FsCheck와 FsCheck.Xunit 패키지를 활용해요. FsCheck에 대해 더 알아보려면 프레임워크 문서를 여기에서 볼 수 있어요.

속성 기반 테스트에 대해 더 알고 싶다면 이 글을 참고해요.


출처

Seb Rose링크가 새 창이나 탭에서 열려요
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
C# Exercism

다이아몬드 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 C# 트랙을 개념 62개연습 문제 178개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.