CS/Try-cat.ch 어려움 - 5

  1. 5.넓은 방 2016.02.16
  2. 4.90도 회전 2016.02.16
  3. 3.갇혔어요! 2016.02.16
  4. 2.큰 숫자로 합치기 2016.02.16
  5. 1.연속된 숫자 찾기 2016.02.16

5.넓은 방

CS/Try-cat.ch 어려움 2016. 2. 16. 20:31

문제:


풀이:

주석으로는 설명이 부족한 것 같아 덧붙이자면 입력 행렬 matrix를 받고 이 행렬에서 0이 오른쪽으로 몇개 연속되는지를 나타내는 행렬 matrix2를 새로 만든다.

matrix2에서 각 원소의 값은 matrix에서 해당 인덱스의 원소 포함 오른쪽으로 0인 원소가 몇개인지를 나타내므로

matrix2(i, j)=n이라고 할때 matrix2(i+1, j)가 n보다 크거나 같다면 i+1번째 행을 포함하는 가로가 n인 직사각형을 만들 수 있다는 뜻이다.

이런 점을 이용해서 matrix2의 모든 원소에서 자신보다 크거나 같은 원소가 아랫쪽으로 몇개가 연속되는지 구하고 그 갯수*자신의 값 n을 해서 직사각형의 넓이를 구하고 그 최대값을 출력하는 방식이다.


#-*-incoding:utf-8-*- #python import sys def count_zero (arr, j, width, cnt): #행에서 연속되는 0의 갯수를 찾아주는 함수 if j==width-1: #마지막 원소일경우 return cnt if arr[j+1]==0: return count_zero(arr, j+1, width, cnt+1) else: return cnt def count_num (matrix, i, j, height, cnt, num): #같은열 아래에 자신보다 큰 숫자가 몇개 연속되는지 반환 if i == height-1: return cnt if matrix[i+1][j]>=num: return count_num(matrix, i+1, j, height, cnt+1, num) else: return cnt size=raw_input().split() height=int(size[0]) width=int(size[1]) matrix=[[0 for col in range (width)] for row in range (height)] #입력받을 행렬 matrix2=[[0 for col in range (width)] for row in range (height)] #0이 연속되는 갯수를 저장할 행렬 for i in range (height): #입력행렬을 받는 부분 arr=sys.stdin.readline().split() for j in range (width): matrix[i][j]=int(arr[j]) for i in range (height): #입력행렬에서 자신으로부터 오른쪽으로 0이 연속되는 갯수를 matrix2에 저장 for j in range (width): if matrix[i][j] == 0: matrix2[i][j]=count_zero(matrix[i], j, width, 1) max_size=0 for j in range (width): for i in range (height): tmp=count_num(matrix2, i, j, height, 1, matrix2[i][j]) #tmp: 사각형의 높이, matrix2[i][j]: 넓이 if tmp*matrix2[i][j] > max_size: max_size = tmp*matrix2[i][j] print max_size


'CS > Try-cat.ch 어려움' 카테고리의 다른 글

4.90도 회전  (0) 2016.02.16
3.갇혔어요!  (0) 2016.02.16
2.큰 숫자로 합치기  (0) 2016.02.16
1.연속된 숫자 찾기  (0) 2016.02.16
Tags
Social

4.90도 회전

CS/Try-cat.ch 어려움 2016. 2. 16. 18:26

문제:


풀이:

#-*-incoding:utf-8-*-
#python

import sys

num=int(raw_input())

matrix=[[0 for col in range (num)]for row in range (num)] #num 사이즈의 2차원 배열

for i in range (num): #배열을 읽어들이는 부분
        arr=sys.stdin.readline().split()
        for j in range (num):
                matrix[i][j]=int(arr[j]) #matrix에 값을 넣어줌

for i in range (num):
        for j in range (num-1, -1, -1):
                print matrix[j][i], # y축을 그대로 x축으로 출력하고 x축은 y축을 역순우로 출력
        print ''


'CS > Try-cat.ch 어려움' 카테고리의 다른 글

5.넓은 방  (0) 2016.02.16
3.갇혔어요!  (0) 2016.02.16
2.큰 숫자로 합치기  (0) 2016.02.16
1.연속된 숫자 찾기  (0) 2016.02.16
Tags
Social

3.갇혔어요!

CS/Try-cat.ch 어려움 2016. 2. 16. 18:20

문제:


풀이:

#-*-incoding:utf-8-*-
#python

import sys

def check_lock(matrix, i, j): #갇혀있는지 확인하는 함수
        for y in range (i-1, i+2): #(i-1)~(i+1)까지 검사
                for x in range (j-1, j+2):
                        if y==i and x==j: #자기자신이 1인것은 넘어간다
                                continue
                        if matrix[y][x]==1:
                                return 0
        return 1

pos=raw_input()
tmp=pos.split()
pos_int=list()

size_y=int(tmp[0])
size_x=int(tmp[1])

matrix=[[0 for col in range(size_x)] for row in range(size_y)] #2차원 배열 생성

for i in range (size_y): #입력값을 matrix에 넣어준다
        tmp2=sys.stdin.readline() #여러줄 입력시 EOF문제를 해결하기 위해서
        tmp3=tmp2.split()
        for j in range (size_x):
                matrix[i][j]=int(tmp3[j]) #matrix에 값 넣어줌

for i in range (1, size_y-1): #1~ size-1인 이유는 가장 바깥쪽 라인은 갇힐 수 없기 때문
        for j in range (1, size_x-1):
                if check_lock(matrix, i, j):
                        print "%d,%d" % (i+1, j+1) #i, j가 0부터 시작하기 때문에 1씩 더해준다.

'CS > Try-cat.ch 어려움' 카테고리의 다른 글

5.넓은 방  (0) 2016.02.16
4.90도 회전  (0) 2016.02.16
2.큰 숫자로 합치기  (0) 2016.02.16
1.연속된 숫자 찾기  (0) 2016.02.16
Tags
Social

2.큰 숫자로 합치기

CS/Try-cat.ch 어려움 2016. 2. 16. 18:18

문제:


풀이:

#-*-incoding:utf-8-*-
#python

import sys

str_input=raw_input()
arr=str_input.split()
arr2=list() #숫자단위로 쪼개 넣을 리스트

for i in range (len(arr[0])): #각각 자릿수별로 쪼개서 arr2로 넣어줌
        arr2.append(arr[0][i])
for i in range (len(arr[1])):
        arr2.append(arr[1][i])

arr2.sort() #오름차순 정렬
arr2.reverse() #뒤집어서 내림차순으로

for i in range (len(arr2)):
        sys.stdout.write(arr2[i]) #붙여서 출력하기 위해서
print ''


'CS > Try-cat.ch 어려움' 카테고리의 다른 글

5.넓은 방  (0) 2016.02.16
4.90도 회전  (0) 2016.02.16
3.갇혔어요!  (0) 2016.02.16
1.연속된 숫자 찾기  (0) 2016.02.16
Tags
Social

1.연속된 숫자 찾기

CS/Try-cat.ch 어려움 2016. 2. 16. 18:14

문제:


풀이:

#-*-incoding:utf-8-*- #python def find_next(arr, num, con): #연속되는 갯수를 반환하는 함수 for i in range (len(arr)): if arr[i]==num+1: num += 1 con += 1 return find_next(arr, num, con) #재귀호출 return con; #없을경우 현재 최대 연속수인 con을 반환 str_input=raw_input() arr=str_input.split() arr_int=list() for i in range (len(arr)): #int형 list로 arr_int.append(int(arr[i])) len_max=0 #최대 연속 길이 for i in range (len(arr_int)): con=find_next(arr_int, arr_int[i], 1) #con은 최소 1부터 시작 if len_max < con: len_max = con #최대 연속 갱신 max_start=arr_int[i] #최대 연속시의 시작값 저장 for i in range (len_max): #시작값부터 len_max만큼 index기능으로 찾음.. 살짝 비효율적이나 코딩 편의 print arr_int[arr_int.index(max_start+i)],


'CS > Try-cat.ch 어려움' 카테고리의 다른 글

5.넓은 방  (0) 2016.02.16
4.90도 회전  (0) 2016.02.16
3.갇혔어요!  (0) 2016.02.16
2.큰 숫자로 합치기  (0) 2016.02.16
Tags
Social
< 1 >