이 영역을 누르면 첫 페이지로 이동
쿄코코 블로그의 첫 페이지로 이동

쿄코코

페이지 맨 위로 올라가기

쿄코코

얼레벌레 생활🤯

백준 1913(달팽이) - Python(파이썬) - 구현

  • 2022.06.06 20:26
  • [백준] Python,Java로 풀기📖/구현
    반응형
     

    1913번: 달팽이

    N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서

    www.acmicpc.net

     

    예제 풀이 

    49 26 27 28 29 30 31
    48           32
    47           33
    46           34
    45           35
    44           36
    43 42 41 40 39 38 37

    입력 받은 길이 7은 문자 n이라고 가정하고 

    이렇게 네부분으로 나눌 수 있다. ( i  : x축( → ), j ( : y축( ↓ ) )

       1. 노란색 부분  : i 값은 일정 | j 값은 1씩 늘어남 | 49부터 시작해서 49 - 7(n) +1 = 43까지 줄어듬 

       2. 초록색 부분 : i 값은 1씩 늘어남 | j 값은 일정 | 43부터 시작해서 43-7(n)+1 = 37까지 줄어듬

       3. 하늘색 부분 : i 값은 일정 | j 값은 1씩 줄어듬 | 37부터 시작해서 37 - 7(n) + 1 = 31까지 줄어듬

       4. 보라색 부분 : i 값은 1씩 줄어듬 | j 값은 일정 | 31부터 시작해서  31 - 7(n) + 1= 26까지 줄어듬


    49 26 27 28 29 30 31
    48 25         32
    47   9       33
    46     1     34
    45           35
    44           36
    43 42 41 40 39 38 37

    ( 0,0 ) -> 7*7 = 49

    ( 1,1 ) -> 5*5 = 25

    ( 2,2 ) ->3*3 = 9 

    ( 3,3 ) -> 1*1 = 1 의 점을 이용해서 

    규칙을 찾으면

    7 + 0 * 2 = 7

    5 + 1 * 2 = 7

    3 + 2 * 2 = 7

    1 + 3(n//2) * 2 = 7

    이런식으로

    ( i,i ) 점에 n - 2xi = 길이이고 그 안에 숫자는 길이 x 길이 수이다 라고 알 수 있다. 

     

    풀이 방법
    ① 함수를 선언하여서 (X의 시작점 , Y의 시작점 , 시작점에서의 숫자, 길이 ) 를 입력 받도록 한다.
    ② 함수안에는 for 루프로 배열 안에 입력 받도록 하는데
         1. Y의 시작점이 1씩 늘어나면서 시작점에서의 숫자가 1씩 줄어들도록
         2. X의 시작점이 1씩 늘어나면서 시작점에서의 숫자가 1씩 줄어들도록
         3. Y의 시작점이 1씩 줄어들면서 시작점에서의 숫자가 1씩 줄어들도록
         4. X의 시작점이 1씩 줄어들면서 시작점에서의 숫자가 1씩 줄어들도록 
    ③ for 루프로 0부터 시작해서 입력 받은 숫자 n//2 1씩 늘어나면서 위에 만든 함수를 실행한다.
    ④ 단, 가운데 점은 입력을 받지 못하므로 끝난 후에는 array에 입력할 수 있도록 한다
    ⑤ 그 후에는 array를 출력하면서 찾는 숫자가 있는 지 확인한다.

    * 참고 

      index는 숫자가 없는 경우 오류가 생기기 때문에 if __ in 을 사용해서 안에 있는지 확인한 후에 index를 사용한다.

     

    Python(파이썬)

    import sys
    n = int(sys.stdin.readline())
    findnum = int(sys.stdin.readline())
    array=[['']*n for _ in range(n) ]
    def func1(startX,startY,n,len):
        #1. 노란색 부분
        for i in range(len-1):
            array[startY][startX] = n
            startY = startY+1
            n = n-1
        #2. 초록색 부분
        for i in range(len-1):
            array[startY][startX]=n
            startX = startX+1
            n = n-1
        #3. 하늘색 부분
        for i in range(len-1):
            array[startY][startX]=n
            startY = startY-1
            n = n-1
        #4. 보라색 부분
        for i in range(len-1):
            array[startY][startX]=n
            startX = startX -1
            n = n-1
    
    # array 안에 집어 넣기 ( 0,0 ) 점에 49 | (1,1) 점에 25 ...
    for i in range(0,n//2,1):
        num = n - i*2
        func1(i,i,num*num,num)
    
    #array 가운데의 점에는 안들어가므로 들어가도록 설정 ( range(0)이 성립이 안되므로 )
    array[n//2][n//2]=1
    
    #j=0부터 시작해서 한줄씩 실행
    for j in range(len(array)):
        #array[0]에 있는 값들을 출력
        print(*array[j])
        #만약 array[i]에 찾는 숫자가 있을 경우 찾도록
        if findnum in array[j]:
            arrayY = j+1
            arrayX = array[j].index(findnum)+1
    
    
    print(arrayY,arrayX)

    Java(자바)

    import java.util.*;
    import java.io.*;
    
    public class Main {
        static int[][] array;
        static void func(int startX,int startY, int n , int len){
            for(int i=0;i<len-1;i++){
                array[startY][startX]=n;
                startY++;
                n--;
            }
            for(int i=0;i<len-1;i++){
                array[startY][startX]=n;
                startX++;
                n--;
            }
            for(int i=0;i<len-1;i++){
                array[startY][startX]=n;
                startY--;
                n--;
            }
            for(int i=0;i<len-1;i++){
                array[startY][startX]=n;
                startX--;
                n--;
            }
        }
        public static void main(String[] args) throws IOException{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringBuilder sb = new StringBuilder();
            int n = Integer.parseInt(br.readLine());
            int findnum = Integer.parseInt(br.readLine());
            array = new int[n][n];
            for(int i=0;i<n/2;i++){
                int num = n - i*2;
                func(i,i,num*num,num);
            }
            array[n/2][n/2]=1;
            int arrayX=0,arrayY =0;
    
            for(int j=0;j<array.length;j++){
                for(int i=0;i<array[0].length;i++){
                    if(findnum==array[j][i]){
                        arrayX= i+1;
                        arrayY = j+1;
                    }
                    sb.append(array[j][i]).append(" ");
                }
                sb.append("\n");
            }
            sb.append(arrayY).append(" ").append(arrayX);
            System.out.print(sb);
        }
    }
    반응형

    '[백준] Python,Java로 풀기📖 > 구현' 카테고리의 다른 글

    백준 2578(빙고) - 구현  (0) 2025.04.11
    백준 10819(차이를 최대로)- Python(파이썬),Java(자바) - 구현,브루트포스(Permutations,Combinations,백트래킹,Java- 스택 사용 )  (0) 2022.06.09
    백준 2232(지뢰) - 구현  (0) 2022.05.25

    댓글

    이 글 공유하기

    • 구독하기

      구독하기

    • 카카오톡

      카카오톡

    • 라인

      라인

    • 트위터

      트위터

    • Facebook

      Facebook

    • 카카오스토리

      카카오스토리

    • 밴드

      밴드

    • 네이버 블로그

      네이버 블로그

    • Pocket

      Pocket

    • Evernote

      Evernote

    다른 글

    • 백준 2578(빙고) - 구현

      백준 2578(빙고) - 구현

      2025.04.11
    • 백준 10819(차이를 최대로)- Python(파이썬),Java(자바) - 구현,브루트포스(Permutations,Combinations,백트래킹,Java- 스택 사용 )

      백준 10819(차이를 최대로)- Python(파이썬),Java(자바) - 구현,브루트포스(Permutations,Combinations,백트래킹,Java- 스택 사용 )

      2022.06.09
    • 백준 2232(지뢰) - 구현

      백준 2232(지뢰) - 구현

      2022.05.25
    다른 글 더 둘러보기

    정보

    쿄코코 블로그의 첫 페이지로 이동

    쿄코코

    • 쿄코코의 첫 페이지로 이동

    검색

    메뉴

    • 홈

    카테고리

    • 분류 전체보기 (168)
      • Python (24)
        • 😈 99클럽 코테 스터디 4기 TIL (23)
        • 궁금한거 정리 (1)
      • SQL (16)
        • HackerRank (15)
      • [백준] Python,Java로 풀기📖 (71)
        • 정렬(Sorting) (6)
        • 그리디 (5)
        • 문자열 (7)
        • 수학 (3)
        • DFS&BFS (10)
        • 구현 (4)
        • 다이나믹 (17)
        • 이분탐색 (1)
        • 자료구조 (10)
        • 최단거리 (5)
        • 인덱스트리 (0)
      • [프로그래머스]Python,Java로 풀기 (6)
        • Level 1 (4)
        • Level 2 (2)
      • Study Platform📚 (25)
        • (운영체제) - 블로그 및 강의 참고 (0)
        • 김영한👨🏻‍🏫의 스프링 부트와 JPA 실무 완전 .. (5)
        • (알고리즘)- [이코테] 이것이 코딩테스트다 정리 (10)
        • 그림으로 배우는 Http&Network Basic (10)
      • 까먹을까봐 적는 것들 (4)
      • 테스트 보고 난 후..🤔 (0)
      • kt 에이블스쿨 (18)

    최근 글

    인기 글

    댓글

    공지사항

    아카이브

    태그

    • 항해99
    • 코딩테스트준비
    • TiL
    • 99클럽
    • 오블완
    • 프로그래머스
    • 티스토리챌린지
    • 백준

    나의 외부 링크

    정보

    쿄코코의 쿄코코

    쿄코코

    쿄코코

    블로그 구독하기

    • 구독하기
    • RSS 피드

    방문자

    • 전체 방문자
    • 오늘
    • 어제

    티스토리

    • 티스토리 홈
    • 이 블로그 관리하기
    • 글쓰기
    Powered by Tistory / Kakao. © 쿄코코. Designed by Fraccino.

    티스토리툴바