업그레이트 (UpGreate)

- 威武不屈


  • Home

  • Categories

  • About

  • Archives

  • Tags

  • Search

SW Expert Academy - D2_1974

Posted on 2019-08-20 | In ALGORITHM

D2_1974. 스도쿠 검증

문제:

  • 스도쿠는 숫자퍼즐로, 가로 9칸 세로 9칸으로 이루어져 있는 표에 1 부터 9 까지의 숫자를 채워넣는 퍼즐이다.

    img

  • 같은 줄에 1 에서 9 까지의 숫자를 한번씩만 넣고, 3 x 3 크기의 작은 격자 또한, 1 에서 9 까지의 숫자가 겹치지 않아야 한다.

    img

  • 입력으로 9 X 9 크기의 스도쿠 퍼즐의 숫자들이 주어졌을 때, 위와 같이 겹치는 숫자가 없을 경우, 1을 정답으로 출력하고 그렇지 않을 경우 0 을 출력한다.

입력:

  1. 테스트 케이스 T

  2. 9*9 크기의 퍼즐 데이터를 테스트 케이스 마다 준다.

    (입력으로 주어지는 퍼즐의 모든 숫자는 1 이상 9 이하의 정수이다.)

    (퍼즐은 모두 숫자로 채워진 상태로 주어진다)

출력:

ex)

#1 1 #2 0 #3 1 #4 0 #5 0 #6 1 #7 0 #8 1 #9 1 #10 0

생각한 로직:

  • 스도쿠를 한칸 한칸 탐색하면서 한번이라도 중복이 나오면 return 0 문제 없이 다 돌아간다면 return 1
  • 중요한 것은 한칸 한칸 빠짐없이 탐색하면서 중복을 어떻게 처리할 것인가

코딩:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
import sys
sys.stdin = open("1.txt","r")

def chksudoku(sudoku):
    for i in range(9):
        garo = list()
        sero = list()

        for j in range(9):
            #가로탐색
            if sudoku[i][j] in garo:
                return 0
            else:
                garo.append(sudoku[i][j])
            #세로탐색
            if sudoku[j][i] in sero:
                return 0
            else:
                sero.append(sudoku[j][i])
            if i%3==0 and j%3==0:
                sq = list()
                for k in range(3):
                    for l in range(3):
                        if sudoku[i+k][j+l] in sq:
                            return 0
                        else:
                            sq.append(sudoku[i+k][j+l])
            # print(garo)
            # print(sero)
            # print(sq)
            # print("=======================")
    return 1

    #네모탐색




for tc in range(1,int(input())+1):
    sudoku=[list(map(int,input().split())) for x in range(9)]
    #각자 탐색하면서 리스트에 넣다가 하나라도 중간에 중복되는게 있으면 out!
    result = chksudoku(sudoku)

    print("#{} {}".format(tc,result))
Read more »

python_상속과 다형성

Posted on 2019-08-19 | In LANGUAGE

상속과 다형성

상속이란?

  • 부모클래스의 모든 멤버를 자식에게 물려줄 수 있는 것이다.

다형성(Overide)

  • 상속받은 메소드 바디를 덮어쓰기

사용법

1
class 자식클래스(부모클래스)
Read more »

SW Expert Academy - D2_1970

Posted on 2019-08-19 | In ALGORITHM

D2_1970. 쉬운 거스름돈

문제:

  • 우리나라 화폐 ‘원’은 금액이 높은 돈을 우선적으로 계산할 때 돈의 개수가 가장 최소가 된다.
  • S마켓에서 사용하는 돈의 종류는 다음과 같다. 50,000 원 10,000 원 5,000 원 1,000 원 500 원 100 원 50 원 10 원
  • S마켓에서 손님에게 거슬러 주어야 할 금액 N이 입력되면 돈의 최소 개수로 거슬러 주기 위하여 각 종류의 돈이 몇 개씩 필요한지 출력하라.

입력:

  1. 테스트 케이스 T
  2. 각 테스트 케이스에는 N이 주어진다. (10 ≤ N ≤ 1,000,000) 마지막 자릿수는 항상 0이다.

출력:

ex)

#1 0 3 0 2 1 3 1 0 #2 0 0 0 0 0 1 1 1

생각한 로직:

  • 고액권 부터 나눠서 몫은 출력 나머지는 다음 금액으로 넘겨서 남겨줄수 있는 금액을 다 쓸 때까지 돌린다.

코딩:

1
2
3
4
5
6
7
8
9
10
for tc in range(1,int(input())+1):
    money=[50000,10000,5000,1000,500,100,50,10]
    N = int(input())
    i=0
    print("#{}".format(tc))
    while i<len(money):
       print(N//money[i],end=" ")
       N=N%money[i]
       i+=1
    print()
Read more »

python_사용자 정의 예외클래스

Posted on 2019-08-18 | In LANGUAGE

사용자 정의 예외클래스

함수 정의

  • 함수 안에 경고문을 띄우는 raise 를 적어서 정의한다.

  • 예외 클래스 정의가능하다.

    ※ 단, 부모 클래스로 Exception 클래스를 상속 받아야 한다.

Read more »

SW Expert Academy - D2_1961

Posted on 2019-08-18 | In ALGORITHM

D2_1961. 숫자 배열 회전

문제:

  • N x N 행렬이 주어질 때,
  • 시계 방향으로 90도, 180도, 270도 회전한 모양을 출력하라.

입력:

  1. 테스트 케이스 T
  2. 각 테스트 케이스에는 N이 주어진다. (N은 3이상 7이하이다.)
  3. 다음 N줄에 N*N 행렬이 주어진다.

출력:

ex)

#1 741 987 369 852 654 258 963 321 147 #2 872686 679398 558496 952899 979157 069877 317594 487722 724799 997427 894586 495713 778960 562998 998259 694855 507496 686278

생각한 로직:

  • 90도 180도 270도 회전한다는 것은 원래 있던 데이터를 정말 수학적으로 회전한다기 보다
  • 불러오는 순서를 마치 회전한 것과 같이 불러 오면 된다.

코딩:

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
32
def printRotate(arrlist,N):
        for i in range(N):
            #읽은 한줄을 잠시 저장할 배열들
            r90 = list()
            r180 = list()
            r270 = list()
            for j in range(N):
                #읽어서 저장할 것들
                r90.append(arrlist[N-1-j][i])
                r180.append(arrlist[N-1-i][N-1-j])
                r270.append(arrlist[j][N-1-i])
            #한줄에 연이어서 출력
            for item in r90:
                print(item,end="")
            print(end=" ")
            for item in r180:
                print(item, end="")
            print(end=" ")
            for item in r270:
                print(item, end="")
            print(end=" ")
            print()




for tc in range(1,int(input())+1):
    N=int(input())
    arrlist=[list(map(int,input().split())) for x in range(N)]
    print("#{}".format(tc))
    printRotate(arrlist,N)
    # print(arrlist)
Read more »
1 … 18 19 20 … 32
Sik

Sik

156 posts
7 categories
30 tags
RSS
© 2021 Sik
Powered by Jekyll
Theme - NexT.Muse