파이썬 알고리즘 60

재귀함수로 누적합 구하기

arr = [3, 4, 5, 1, 6, 9] 출력된 결과: 3 7 12 13 19 28 1. sum을 전역변수로 두고 하는 방법 sum=3 def abc(level): global sum if level==5: print(sum) return print(sum) sum+=arr[level+1] abc(level+1) abc(0) 2. sum을 매개변수로 두고 하는 방법1 def abc(level,sum): if level==5: print(sum) return print(sum) abc(level+1,sum+arr[level+1]) abc(0,3) # level sum 3. sum을 매개변수로 두고 하는 방법2 def abc(level,sum): print(sum) if level==5: return a..

SWEA 1208 Flatten

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV139KOaABgCFAYh SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 평평하게 만들기 전에 제일 먼저 알아야 할 것은 어디가 최댓값이고 어디가 최솟값인지이다. 따라서 for문으로 돌면서 최댓값이랑 최솟값을 찾아준다. for tc in range(1, 11): dump_times = int(input()) a = list(map(int, input().split())) for times in range(dump_times): MAX = 0 MIN = 101 for i ..

[파이썬] SWEA 4408 자기 방으로 돌아가기

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWNcJ2sapZMDFAV8 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 발상이 어려웠던 문제였다... 1) 학생들이 방 숫자가 작은 곳에서 큰곳으로 가든, 큰곳에서 작은 곳으로 가든 그 방향을 알 필요는 없다 이게 무슨 말이냐 하면 1번 학생이 1번방에서 4번방으로 가고, 2번 학생이 1번 방에서 4번 방으로 가는 경우랑 1번 학생이 1번방에서 4번방으로 가고, 2번 학생이 4번 방에서 1번 방으로 가는 경우랑 아예 똑같다는 것이다. 그래서 헷갈림을 방지하기 위해 무조..

[파이썬] SWEA 11671 기지국

A, B, C 기지국 별로 상하좌우로 해당 기지국이 배정된 길이만큼 가면서 H를 바꿔주는 문제이다. 나는 X, H, A, B, C 가 아닌 제 3의 글자 (L)으로 바꿨다. j가 증가하면서 벽에 만났을때, 다른 기지국을 만났을 때 를 제외하고는 다 L로 바꿔주게끔 코드를 짰다. def wifi_reach(y, x, distance): dy = [-1, 1, 0, 0] dx = [0, 0, -1, 1] for i in range(4): j = 1 while j

[파이썬] 백준 1475번 방 번호

https://www.acmicpc.net/problem/1475 1475번: 방 번호 첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다. www.acmicpc.net bucket을 활용하면서 약간의 융용력이 필요한 문제였다. 일단, 방 번호를 list에 넣은 뒤, 각각 방 번호를 bucket에 넣었다. 그러면 6과 9 빼고 다른 번호들은 필요한 플라스틱 숫자를 반영한다. bucket = [0]*10 arr = list(map(int, input())) for i in range(len(arr)): bucket[arr[i]] += 1 6과 9는 서로 뒤집어서 사용할 수 있기 때문에, 6과 9의 개수 차이가 아무리 많이 나도 결국 필요한 숫자 세트의 수는 (6의..

[파이썬] 백준 6603 로또

https://www.acmicpc.net/problem/6603 6603번: 로또 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로 www.acmicpc.net 로또 번호가 주어지는 번호들의 개수, 번호들 로 한 줄에 주어진다. 일단 이 모두를 arr에 입력받은 후, 주어지는 번호들의 개수와 번호들을 서로 다른 변수에 저장한다. (하나는 int형 변수, 하나는 list) 첫 숫자가 0일때는 에러가 나기 때문에, if로 따로 빼서 처리해줬다. while True: arr = list(map(int, input().split())) n = arr[..

[파이썬] SWEA 11315 오목판정

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXaSUPYqPYMDFASQ SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 2중for문을 돌면서 o를 만나면, omok이라는 함수를 실행한다. omok 함수를 연속된 돌이 5개 있는지를 확인하는 함수이다. True이면, flg=1으로 만든 후, 모든 for문을 break해서 YES를 출력한다. for testcase in range(1,T+1): flg = 0 N = int(input()) arr = [list(input()) for _ in range(N)] for i ..

[파이썬] 백준 7113 Rectangle (while문)

https://gkim1011.tistory.com/54 [파이썬] 백준 7113 Rectangle https://www.acmicpc.net/problem/7113 7113번: Rectangle Vilibald has decided to cut a right-angled checked page of size n×m cells into squares. First of all he cut off the largest possible square us.. gkim1011.tistory.com 정석으로 푸는건 재귀인데 recursionerror가 계속 생겨서 while문으로도 풀어보았다. 전체 코드) n, m = map(int, input().split()) cnt = 0 while True: if n>m: ..

[파이썬] 백준 7113 Rectangle

https://www.acmicpc.net/problem/7113 7113번: Rectangle Vilibald has decided to cut a right-angled checked page of size n×m cells into squares. First of all he cut off the largest possible square using a straight cut. Then he took away the square and repeated the action with the remaining rectangle. In this wa www.acmicpc.net 3 7 정사각형을 자르는 프로세스를 숫자로 나타내면 n m 3 7 3 4 3 1 2 1 1 1 이다 즉, 둘중에 높은 값에서 낮은..

[파이썬] SWEA 3499 퍼펙트 셔플

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWGsRbk6AQIDFAVW SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 위 그림에 나온 단계 순서대로 알고리즘을 짰다 1) 카드 덱을 절반으로 나워서 각자 다른 리스트에 넣는다. T = int(input()) for tc in range(1, 1+T): n = int(input()) arr = list(input().split()) result = [] shuffle_bottom = arr[:((n-1)//2)+1] shuffle_top = arr[((n-1)//2)+..