https://www.acmicpc.net/problem/2446
문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
출력
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
해결방안
1. 각 K번째 줄에 대해 다음과 같은 출력을 정의한다.
2. 1 ~ N-1번째 줄에는 별을 (N-K)*2+1개 출력한다.
3. N번째 줄에는 별을 1개 출력한다.
4. N+1 ~ 2N-1번째 줄에는 별을 (K-N)*2+1개 출력한다.
2. 모든 출력은 2*N-1개의 길이를 갖은 문자열 중앙정렬로 출력한다.
소스코드 - 파이썬
import sys
input = sys.stdin.readline
# k : star, n : max_len
def midStar(k, n):
blank = " "
star = "*"
stars = star * k
blanks = blank * ((n-k)//2)
return blanks + stars
def printStars(n):
l = 2*n-1
for k in range(1,l+1):
if k == n:
s = midStar(1, l)
elif k < n:
s = midStar((n-k)*2+1, l)
elif k > n:
s = midStar((k-n)*2+1, l)
print(s)
N = int(input())
printStars(N)
소스코드 - C++
#include <cstdio>
#include <string>
#include <iostream>
using namespace std;
string midStar(int k, int n) {
string blank = " ";
string star = "*";
string stars = "";
int blank_n = (n-k)/2;
int star_n = k;
int i;
for (i=0; i<blank_n; i++) {
stars.append(blank);
}
for (i=0; i<star_n; i++) {
stars.append(star);
}
return stars;
}
int main() {
int n, k;
string s;
scanf("%d", &n);
int l = 2*n-1;
for(k=1; k<l+1; k++) {
if (k == n) {
s = midStar(1, l);
} else if (k < n) {
s = midStar((n-k)*2+1, l);
} else if (k > n) {
s = midStar((k-n)*2+1, l);
}
cout << s << endl;
}
}
소스코드 - Java
import java.util.*;
public class Main {
public static String midStar(int k, int n) {
String blank = new String(" ");
String star = new String("*");
String stars = new String("");
int blank_n = (n-k)/2;
int star_n = k;
int i;
for (i=0; i<blank_n; i++) {
stars += blank;
}
for (i=0; i<star_n; i++) {
stars += star;
}
return stars;
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int l = 2*n-1;
int k;
String s = new String("");
for (k=1; k<l+1; k++) {
if (k == n) {
s = midStar(1, l);
} else if (k < n) {
s = midStar((n-k)*2+1, l);
} else if (k > n) {
s = midStar((k-n)*2+1, l);
}
System.out.println(s);
}
}
}
'Algorithm > Baekjoon' 카테고리의 다른 글
[Baekjoon-10797] 백준-10797 10부제 (0) | 2020.05.10 |
---|---|
[Baekjoon-14681] 백준-14681 사분면 고르기 (0) | 2020.05.04 |
[Baekjoon-1260] 백준-1260 손익분기점 (0) | 2019.12.12 |
[Baekjoon-1260] 백준-1260 DFS와 BFS (0) | 2019.12.12 |
[Baekjoon-2753] 백준-2753 윤년 (0) | 2019.12.07 |