티스토리 뷰
문제 링크 : https://www.acmicpc.net/problem/10996
문제 |
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
입력 |
첫째 줄에 N(1첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
출력 |
첫째 줄부터 차례대로 별을 출력한다.
#include <stdio.h>
#include <iostream>
using namespace std;
int main(void) {
int n;
int re = 0;
cin >> n;
for (int k = 0; k < n; k++)
{
if (n % 2 == 0)
{
re = n / 2;
for (int i = 0; i < re; i++)
{
printf("* ");
}
printf("\n");
for (int i = 0; i < re; i++)
{
printf(" *");
}
}
else if (n % 2 == 1)
{
re = n / 2;
for (int j = 0; j < re + 1; j++)
{
printf("* ");
}
printf("\n");
for (int j = 0; j < re; j++)
{
printf(" *");
}
}
printf("\n");
}
return 0;
}
코드를 작성하면서 한 2번 정도 실수를 한 것 같다. 첫번째 실수는 새로운 패턴이 나올 때 줄바꾸기(\n)를 넣지 않은 것이고, 두번째 실수는 패턴 구현에만 신경 쓰느라 입력한 횟수만큼 패턴이 또 반복되어야 한다는 것을 잊은 것이다.
일단 이 문제는 처음에 별을 어떻게 구현할 지 규칙부터 찾기 시작했다. 2차원 배열로도 구현을 하면 어떨까라는 생각을 했으나 생각보다 복잡해질 것 같아서 일찌감치 접었다. 그리고 *와 공백을 번갈아서 입력한 숫자만큼 출력하는 알고리즘을 상상해보았다. 이것도 복잡했다. 그래서 떠올린 것이 '어차피 공백은 눈으로 볼 때 아무것도 출력되지 않은 것처럼 보이니까 *랑 공백을 한 세트로 묶어서 패턴을 만들면 어떨까?'였다.
그래서 패턴의 첫 번째줄에는 "* "이 번갈아서 나타나고, 두 번째 줄에는 " *"이 번갈아서 나타난다. 이제 번갈아서 나타나는 횟수 설정에 대한 문제가 남았는데 이렇게 패턴을 *와 공백을 합쳐놓고 보니 홀수가 입력될 때는 첫번째 줄에만 추가로 패턴이 하나 더 나타난다는 사실을 알게되었다. 그래서 입력한 숫자가 홀수인지 짝수인지 구분하여 홀수면 첫 번째 줄에 패턴을 하나 더 출력하고, 짝수면 두 줄 모두 같은 횟수만큼 패턴을 반복 출력한다.
...이렇게 여기까지만 생각하다가 앞서 말한 2가지 실수를 저질러버렸다. 패턴만 신경쓸 것이 아니라 두 줄의 패턴 전체가 입력한 숫자만큼 또다시 반복되어 나타나고, 다음 패턴으로 넘어갈 때 줄바꿈(\n) 처리를 하지 않아 첫 번째 콘솔 화면에서는 완전히 엉겨버린 별 찍기가 나타났었다. 다행히 정리하기 어려운 실수는 아니라 금방 해결했다.
'백준 알고리즘' 카테고리의 다른 글
백준 1393번 : 음하철도 구구팔 [문자열/C/C++] (0) | 2020.04.20 |
---|---|
백준 5622번 : 다이얼 [문자열/C/C++] (0) | 2020.04.18 |
백준 2941번 : 크로아티아 알파벳 [문자열/C/C++] (0) | 2020.04.15 |
백준 2908번 : 상수 [문자열/C/C++] (0) | 2020.04.14 |
백준 1152번 : 단어의 개수 [문자열/C/C++] (0) | 2020.04.10 |
- Total
- Today
- Yesterday
- 백준 풀이
- 컴퓨터과학과
- 백준
- 컴퓨터이론
- 컴퓨터기초
- 자바
- C언어
- TCP
- It
- 서블릿
- 인터넷
- 컴퓨터공학과
- 컴퓨터공학
- 코드 리뷰
- 알파넷
- 프로그래밍
- 네트워크
- Servlet
- C++
- jsp
- 알고리즘 문제
- 컴퓨터 네트워크
- 코딩테스트
- 코딩 테스트
- 알고리즘
- 웹개발
- java
- 컴퓨터과학
- 컴퓨터
- 코딩
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |