ASCII Art N

Write a program that lets the user enter in an odd positive integer (you may assume the input is always valid), and prints out an ASCII art letter N made using the character N.

If the input is 1, the output is:

N

If the input is 3, the output is:

N N
NNN
N N

If the input is 5, the output is:

N   N
NN  N
N N N
N  NN
N   N

If the input is 7, the output is:

N     N
NN    N
N N   N
N  N  N
N   N N
N    NN
N     N

The pattern continues on like this. The output may contain trailing spaces.

ascii-art
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

26개의 풀이가 있습니다. 1 / 3 Page

Python 2.7

a = [' ']*input()
a[0] = 'N'
a[-1] = 'N'
print ''.join(a)
for i in range(1, len(a)):
    b = a[:]
    b[i] = 'N'
    print ''.join(b)
신선하네요^^ - 디디, 2016/03/23 17:06 M D
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

Java

    public static void main(String[] args)
    {
        int num = Integer.parseInt(args[0]);

        for (int i=0;  i<num;  i++)
        {
            System.out.print("N");
            for (int j=1;  j<num-1;  j++)
            {
                if ( j == i && (i != 0 || i != (num-1)) )
                    System.out.print("N");
                else
                    System.out.print(" ");
            }
            if (num > 1)
                System.out.println("N");
        }
    }
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

Python 3

def AAN(a):
    b = 0
    while b < a:
        b += 1
        if b == 1 or b == a:
            if a == 1:
                print('N')
            else:
                print('N' + ' ' * (a - 2) + 'N')
        else:
            print('N' + ' ' * (b - 2) + 'N' + ' ' * (a - b - 1) +'N')
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

Common Lisp 공부 중인데 어렵네요. 재귀를 사용해서 구현해야할 것 같은 압박이 드네요.

(defconstant N #\N "character 'N'")
(defconstant SPACE #\  "character ' '")

;; 라인을 표현하는 문자 리스트 생성
(defun build-row (row size)
    (let ((list nil))
        (loop for x from 0 to (1- size) do
            (if (or
                    (eql row x)
                    (eql x 0)
                    (eql x (1- size))
                )
                (push N list)
                (push SPACE list)
            )
        )
        list
    )
)

;; 각 라인별 데이터를 리스트로 만듬
(defun build-letter-n (size)
    (let ((list))
        (dotimes (row size)
            (push (build-row row size) list)
        )
        list
    )
)

;; 라인별, 문자 항목을 화면에 표시
(defun print-letter-n (size)
    (mapcar
        (lambda (row-list)
            (dolist (value row-list)
                (princ value)
            )
            (fresh-line)
        )
        (build-letter-n size)
    )
)

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

PHP

const FIRST = 1;
const N = "N";
const SPACE = " "; 

function print_line($current, $finish) {

    for($i = FIRST; $i <= $finish; $i++)
    {
        if($i <> $current && !($i == FIRST || $i == $finish)) echo " "; 
        else echo "N";
    }

    echo "\n";
}

function main($agrv)
{
    for($i = FIRST; $i <= $agrv; $i++)
    {
        print_line($i, $agrv);
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include <stdio.h>
int main(){
    int a,i,j;
    scanf("%d",&a);
    for(i=0;i<a;i++)
    {
        for(j=0;j<a;j++)
        {
            if(j==0||j==a-1||i==j)
            {
                printf("N");
            }
            else
            {
                printf(" ");
            }
        }
        printf("\n");
    }
}

C언어로 간단하게 짜봤어요 ^^ - 코딩호빵이, 2015/08/22 16:22 M D
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

VB.NET

    Sub Main()
        Dim size As Integer = CInt(Val(Console.ReadLine))

        For y As Integer = 1 To size
            For x As Integer = 1 To size
                Console.Write({"N", " "}(CInt((x = 1 Or x = size) Or x = y) + 1))
            Next
            Console.WriteLine()
        Next

        Console.ReadLine()
    End Sub

x축 처음과 끝, x 와 y가 같을경우 N을 출력했습니다.

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
void exce86()
{
    int n;

    scanf_s("%d", &n);

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (j == 0 || j == (n - 1) || j == i)
                printf("N");
            else
                printf(" ");
        }
        printf("\n");
    }
}

C입니다.

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def sevendrawer(a):
    a = int(a)
    if (a % 2) == 0:
        print("Odd number is not acceptable!")
        exit()
    else:
        palette = []
        for iii in range(0, a):
            palette.append('x')
        for i in range(0, a):
            palette[0] = ('N')
            for ii in range(1, a-1):
                palette[ii] = (' ')
            palette[i] = ('N')
            palette[a-1] = ('N')
            print("".join(palette))

a = input()
sevendrawer(a)

join 함수로 리스트를 문자열로 변환할 수 있어서 일이 편해졌습니다.

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
(defn ancii-art-n [n]
  (let [max-idx (dec n)
        r (range n)
        l-idxs (map vector r (repeat 0))
        m-idxs (map vector r r)
        r-idxs (map vector r (repeat max-idx))
        idxs (set (concat l-idxs m-idxs r-idxs))]
    (doseq [i r
            j r]
      (if (contains? idxs [i j])
        (print "N")
        (print " "))
      (when (= j max-idx)
        (println)))))

(ancii-art-n 1)
;>> N
;=> nil
(ancii-art-n 3)
;>> N N
;>> NNN
;>> N N
;=> nil
(ancii-art-n 5)
;>> N   N
;>> NN  N
;>> N N N
;>> N  NN
;>> N   N
;=> nil
(ancii-art-n 7)
;>> N     N
;>> NN    N
;>> N N   N
;>> N  N  N
;>> N   N N
;>> N    NN
;>> N     N
;=> nil

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

※ 풀이작성 안내
  • 본문에 코드를 삽입할 경우 에디터 우측 상단의 "코드삽입" 버튼을 이용 해 주세요.
  • 마크다운 문법으로 본문을 작성 해 주세요.
  • 풀이를 읽는 사람들을 위하여 풀이에 대한 설명도 부탁드려요. (아이디어나 사용한 알고리즘 또는 참고한 자료등)
  • 작성한 풀이는 다른 사람(빨간띠 이상)에 의해서 내용이 개선될 수 있습니다.
목록으로
코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.

ascii-art x 2
연관 문제

언어별 풀이 현황
전 체 x 26
기 타 x 4
python x 10
lisp x 1
php x 3
cpp x 4
java x 3
ruby x 1