boj-2447(별 찍기)
꽤 오랫동안 해결하지 못하고 있던 문제.. 코드는 잘 실행되고, 문제는 하나도 없어보였는데 뭐지.. 계속 시간초과가 난다 그래서 포기하고 있다가 다시 오랜만에 들어가서 확인해보니까, pypy로 돌려본적이 없네?
그래서 전에 시간초과가 난 코드 그대로 pypy로 돌리니까 맞았습니다가 나와버림... ㅋ
어이가 없는데 정말... 시간초과 나면 pypy로 돌려보세요...
클래스가 좀 있는 문제라서, 고민을 꽤 했다.
분류대로 재귀함수로 풀고싶어서, 고민을 오래 한것 같다.
옛날에 풀다가, 마지막에 작성한 코드도 뭔가 갑자기 번뜩! 하면서 미친듯이 작성해서 코드 해설은 못하겠다. 이전 코드와 마지막에 패스한 코드를 따로 올려놓아볼테니.. 둘 다 확인해보면 좋을 것 같다.
이전 코드
import sys
n = int(input())
a = [['*'] * n for i in range(n)]
def star_print(n, list, origin_size):
origin = origin_size
if n < 3:
return list
for i in range(origin):
for j in range(origin):
if j // (n // 3) == 1 and i // (n // 3) == 1: # n = 27 / n // 3 = 9 -> n = 9 / n // 3 = 3
for t in range(origin):
for p in range(origin):
if i + n*t < origin and j + n*p < origin:
list[i + n*t][j + n*p] = " "
return star_print(n // 3, list, origin)
pr = star_print(n, a, n)
for i in range(len(pr)):
for j in range(len(pr[0])):
sys.stdout.write(pr[i][j])
sys.stdout.write("\n")
패스 코드
import sys
def print_star(star, N, origin_size):
if N < 3:
return star
else:
for i in range(origin_size):
for j in range(origin_size):
if (i // (N//3)) % 3 == 1 and (j // (N//3)) % 3 == 1:
star[i][j] = ' '
return print_star(star, N//3, origin_size)
N = int(input())
star_list = [['*'] * N for i in range(N)]
star = print_star(star_list, N, N)
for i in range(N):
for j in range(N):
sys.stdout.write(star[i][j])
sys.stdout.write("\n")
마지막 코드를 짤 땐, 진짜 누가 뒤통수를 콱 때린거마냥 갑자기 코드를 막 수정했는데, 잘 돌아가서 신기했다. 확실히 코드가 많이 짧아지고, 잘 돌아가서 흥미로웠던 문제였다.
Author And Source
이 문제에 관하여(boj-2447(별 찍기)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dbsrlskfdk/boj-2447별-찍기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)