블로그 이미지
공부할 때 정리 장소로 쓰거나 웹서핑할때 메모 할 때 쓰거나, 개인적인 생각을 기록하기 위해서 사용 되는 블로그 입니다.
최익필

Recent Comment

Category

  • 335,252total
  • 155today
  • 361yesterday

PC/UVa ID : 110104/706, 인기도 : A, 성공률 : 보통, 레벨 : 1

{

한 친구가 방금 새 컴퓨터를 샀다. 그 친구가 지금까지 샀던 가장 강력한 컴퓨터는 공학용 전자 계산기였다. 그런데 그 친구는 새 컴퓨터의 모니터보다 공학용 계산기에 있는 LCD 디스플레이가 더 좋다며 크게 실망하고 말았다.

그 친구를 만족시킬 수 있도록 숫자를 LCD 디스플레이 방식으로 출력하는 프로그램을 만들어 보자.

입력

입력 파일은 여러 줄로 구성되며 표시될 각각의 숫자마다 한 줄씩 입력된다. 각 줄에는 s와 n이라는 두 개의 정수가 들어있으며, n은 출력될 숫자(0 <= n <= 99,999,999), s는 숫자를 표시하는 크기(1 <= s <= 10)를 의미한다. 0이 두 개 입력된 줄이 있으면 입력이 종료되며 그 줄은 처리되지 않는다.

출력

입력 파일에서 지정한 숫자를 수평 방향은 '-' 기호를, 수직 방향은 '|'를 이용해서 LCD 디스플레이 형태로 출력한다. 각 숫자는 정확하게 s + 2 개의 열, 2s + 3개의 행으로 구성된다.

마지막 숫자를 포함한 모든 숫자를 이루는 공백을 스페이스로 채워야 한다. 두개의 숫자 사이에는 정확하게 한 열의 공백이 있어야 한다.

각 숫자 다음에는 빈 줄을 한 줄로 출력한다. 밑은 각 숫자를 출력하는 방식이 나와 있다.

문제 4 풀이 스샷



문제 풀때의 의문점들

1. if문을 어디에 써야 하는가?

처음에 if 를

논리적 if, 물리적 if에 대한 고찰을 했다. 이것에 대해서 정리할 시간이 있다면 정리해 두겠다. 경우에 따라서 물리적인 if가 더 가독성이 뛰어났다.

2. 가독성은 어디서 많이 무너 지나? 

연속된 for 문, 함수명, 변수명, if문 중첩 등에서 많이 깨지더라. 그리고 각 숫자를 구현 하려 할때 for문을 돌리는 부분에서 많이 떨어 진다.

3. 노가다 작업을 없앴나?

기존 함수를 호출해서 변경했지만. 마음에 들진 않는다. 작업 내내 더 좋은 방법은 없을까 생각해 보았지만 마땅히 떠오르지 않았다. 단지 코드의 재사용을 해야겠다 싶어서, 8 을 만들고 8 로 9를 만들고 8로 0을 만들고 9로 5를 만들고 등을 많이 사용 했다.

4. 가장 어려운 것은 무엇이었나?

출력을 위하여 for문 돌릴때 가장 많이 힘들었다. "행"이 무엇이고, "열"이 무엇인지 구분짖지를 못해서, 계속 헤맸었다. 그러다가 "열"을 모아서 "행"으로 출력 하면 된다는 것을 알았다. ...

5. 테이블 보다 문자열을 쓰는게 좋지 않았겠나? 

테이블로 하고 나서 문자열로 할껄 생각했다. 왜냐하면 for문 돌릴 때 무척 신경이 쓰였기 때문이다. 하지만 다 하고 나니, 원소의 엑세스가 더 편하기 때문에 쓸만했다.

소스 코드

다른 사람이 푼 것을 보니, 난 참 어렵게 구현했다는 생각 뿐.. ^^

관련 링크 :

http://www.filewiki.net/tc/entry/LCD-Display
http://www.kuku.pe.kr/entry/UVA-706-LCD-Display
http://snippets.dzone.com/posts/show/5244
1차 리팩토링 }

저작자 표시
posted by 농사를 짓는 게임 프로그래머 최익필

Trackback http://ikpil.com/trackback/901 관련글 쓰기

댓글을 달아 주세요

  1. 농사를 짓는 게임 프로그래머 최익필 2009/11/08 21:28  Addr  Edit/Del  Reply

    음.. 주석 다는 습관을 완전히 갖어야 겠다는 생각이 든다. 다른 사람이 짠 소스를 이해하고, 1차 리팩토링을 거쳤었다. 이 코드를 지금 다시 보니, 머리속에 잘 들어 오지 않는다.

    주석은 나를 위해 단다는 말이 맞다.