알고리즘/문제풀이 12

[Python] 백준 1780 "종이의 개수_분할정복" 문제풀이

💡문제 풀이 import sys input = sys.stdin.readline n = int(input()) papers = [list(map(int,input().split())) for _ in range(n)] a=0 b=0 c=0 def asdf(x,y,n): global a,b,c sameNum = papers[x][y] for i in range(x,x+n): for j in range(y,y+n): if sameNum != papers[i][j]: asdf(x,y,n//3) asdf(x+n//3,y,n//3) asdf(x+2*n//3,y,n//3) asdf(x,y+n//3,n//3) asdf(x+n//3,y+n//3,n//3) asdf(x+2*n//3,y+n//3,n//3) asdf(x,y..

[Python] 백준 2630 "색종이만들기_분할정복" 문제풀이

💡풀이과정 분할 단계 하얀색과 파란색 종이의 수를 구하기 위해 (0~n/2,0~n/2), (n/2~n, 0~n/2), (0~n/2, n/2~n), (n/2~n, n/2~n) 구역을 4구역으로 나눠준다. 정복 단계 해당구역의 종이가 모두 같은 색이면 합병단계로 넘어가고 해당구역의 종이가 모두 같은 색이 아니라면 다시 분할 단계로 넘어간다. 합병 단계 해당 색깔의 종이의 수를 1씩 더해준다. import sys input = sys.stdin.readline n = int(input()) paper= [list(map(int,input())) for _ in range(n)] white, blue = 0 def divideAndConquer(x,y,n): global white,blue sameColor =..

[Python] 백준 2959 "거북이_sort" 문제풀이

import sys a,b,c,d=map(int,sys.stdin.readline().split()) list=[a,b,c,d] #list.sort(reverse=True) list=sorted(list,reverse=True) print(list[1]*list[-1]) 문제풀이 제일 큰 직사각형을 만드는 공식은 (두번째로 큰 수*제일 작은 수) 이다. 주어진 길이를 내림차순으로 정렬하여 계산한다. 피드백 sort() - 리스트가 가지고 있는 메소드. 리스트를 정렬된 상태로 변경한다. sorted() - 파이썬 내장함수. iterable 객체로부터 정렬된 리스트를 생성한다.

[Python] 백준 10162 "전자레인지_greedy" 문제풀이

import sys food=int(sys.stdin.readline()) time=[300,60,10] time=sorted(time,reverse=True)#내림차순으로 정렬 if food%time[-1] !=0: print(-1) else: for i in time: print('%d' %(food//i)) if food >=i: food -= i 문제풀이 냉동음식 조리시간을 입력받은 후 정해진 조리 시간을 큰 시간부터 나누어 몫을 저장한다. 피드백 정해진 조리시간을 time 배열에 저장하여 사용했는데 다른 코드들을 살펴보니 바로 사용하여 문제를 해결했다.

[Python] 백준 2720 "세탁소사장동혁_greedy" 문제풀이

import sys test_num=int(sys.stdin.readline()) #테스트 케이스의 개수를 입력받음 test=[] for _ in range(test_num): test.append(int(sys.stdin.readline())) for i in test: result = i//25 i -= 25*result result1 = (i%25)//10 i -= 10*result1 result2 = ((i%25)%10)//5 i -= 5*result2 result3 = (((i%25)%10)%5)//1 i -= result3 print(result,result1,result2,result3) 문제풀이 거스름돈의 액수를 받으면 제일 비싼 동전부터 나누어 계산해준다. (25,10,5,1,,,, 의 ..

[Python] 백준 15829 "Hashing_해싱" 문제풀이

import sys L = int(sys.stdin.readline()) n = sys.stdin.readline().rstrip() result=0 for i in range(L): result+=(ord(n[i])-96)*31**i print(result %1234567891) 문제풀이 첫 줄에는 문자열의 길이를 받고 둘째줄에는 소문자 문자열을 입력받는다. ord('a')=97이기 때문에 -96을 해준뒤 r^i 값을 곱해준다. 마지막에 1234567891을 나눈뒤 출력해주면 끝. 피드백 문자열에 대한 문제였다. 파이썬의 ord() 내장함수가 핵심이었다.

[Python] 백준 2231 "분해합_완전탐색" 문제풀이

import sys #분해합 구하는 함수 def deSum(n): num=str(n) s=n for i in range(len(num)): s=s+int(num[i]) return s # 생성자 구하는 함수 def deCon(m): for i in range(m): if m ==deSum(i): return i N=int(sys.stdin.readline()) print(deCon(N)) 문제풀이 먼저 분해합을 구하는 함수를 구현했다. 자릿수를 알기위해 str로 변환해주고 각각 자리값들을 다 더해준다. 그다음은 생성자 함수를 만들어줬다. 0부터 비교하여 분해합 결과와 같을 때 값을 반환해 주었다. 피드백 처음에 분해합이라는 개념이 잘 이해가 안가서 문제풀기가 어려웠다.