본문 바로가기

728x90

study/알고리즘

(44)
[알고리즘/백준] 7576번 토마토 (BFS) 7576번 토마토 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 접근 방법 토마토가 보관 당시 익어있다면 배열에 1이라고 저장되어 있다. 이러한 토마토를 미리 시작 전 queue에 담아 BFS를 한다. for i in range(N): storage.append(list(map(int, input().split()))) ripe_tomatoes.extend([(i, j) for j in range(M) if storage[-1][j] == 1]) BFS를 할 때 위, 아래, 좌, ..
[알고리즘/백준] 1541번 잃어버린 괄호 1541번 잃어버린 괄호 - https://www.acmicpc.net/problem/1541 (그리디 알고리즘) 접근 방법 1번 예제에서 볼 수 있듯이 - 기호가 나온 후 뒤의 값이 크면 클수록 값이 작아진다. 따라서 1번 예제에서 괄호는 55-(50+40)으로 나타난다. 그래서 split 함수를 이용하여 - 기준으로 값을 나눈 다음 +가 들어있는 숫자들을 먼저 계산해 준 다음 다 더해준다. 이때 첫번째 숫자는 무조건 +이기 때문에 마지막에 계산을 따로 해준다. 코드 처음에는 +가 들어있는 경우에만 split을 해주었으나 각 값을 int형으로 형변환을 해주어야 해서 모든 값을 for문으로 돌리는 코드로 수정하였다. 그리고 + 기호만 포함되어있을 경우를 위해 if문으로 len(expression)==1의..
[알고리즘/백준] 2775번 부녀회장이 될테야 2775번 부녀회장이 될테야 - https://www.acmicpc.net/problem/2775 접근 방법 2층 4호 --> 20 = 2층 3호 + 1층 4호 ( 노랑 네모들의 합) 1층 4호 --> 10 = 1층 3호 + 0층 4호 ( 초록 세모들의 합) --> 재귀로 해결 가능 종료 조건 : 0층 or 1호 - 1호일 때 모든 값은 1 - 0층일 때 모든 값은 호수 def resident(k, n, apart): # 종료 조건: 0층이거나 1호일 때 if n == 1: return 1 if k == 0: return n return resident(k - 1, n) + resident(k, n - 1) 코드 - 처음에 Pypy3 통과 / Python3 시간 초과 def resident(k, n): ..
[알고리즘/프로그래머스] 멀쩡한 사각형 Summer/Winter Coding(2019) > 멀쩡한 사각형 / level2 코딩테스트 연습 - 멀쩡한 사각형 가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을 programmers.co.kr 나의 풀이 접근방법 1. 가로/세로 길이 W, H의 최대공약수를 구한다. 예시 그림을 보면 2*3 사각형이 4개 반복되면서 규칙적으로 있는 모습이다. 2*3은 가로가 8, 세로가 12인 사각형의 최대공약수인 4로 나눠준 수이다. 여기서 힌트를 얻어 최대 공약수를 구해 사용하였다. (gcd 함수 사용하지 않고 그냥 구했음) m = min(w, h) whil..
[알고리즘] 정렬 알고리즘 공부 : 동빈나 유튜브 정렬(Sorting) : 데이터를 특정한 기준에 따라 순서대로 나열하는 것 1. 선택정렬 - 처리되지 않은 데이터 중 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것을 반복 - 시간 복잡도 : O(N²) N번 만큼 가장 작은 수를 찾아서 맨 앞으로 보낸다. 전체 연산 횟수 = N + (N-1) + (N-2) + … + 2 = (N² + N - 2) / 2 array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(len(array)): min_index = i #가장 작은 원소의 인덱스 for j in range(i+1, len(array)): if array[min_index] > array[j]: mi..
[알고리즘/백준] 21758번 꿀 따기 21758번 꿀 따기 - https://www.acmicpc.net/problem/21758 접근 방법 1. 무조건 꿀통은 끝에 있어야 한다. --> 그래야 꿀벌이 지나가는 칸 수가 늘어난다. 2. 하나의 꿀벌은 맨 끝에서 출발한다. --> 1번과 일맥상통 3. 꿀통이 왼쪽에 있냐 / 오른쪽에 있냐의 경우의 수 2가지 + 장소 칸이 3개일 경우 + 장소 칸이 3개일 경우에는 중간 칸이 꿀통 위치가 될 수 있음 if len(honey_list) == 3: answer = max(2*honey_list[1], answer) 4. 또 다른 꿀벌의 모든 경우의 수는 반복문으로 해결 코드 - 처음에 서브태스크 4번 시간 초과 def honey(idx1, idx2, list_name): return sum(list..
[알고리즘/프로그래머스] 가장 큰 수 정렬 > 가장 큰 수 / level2 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 나의 풀이 접근방법 1. permutations 사용 --> 문제점 : 시간 초과 접근방법 2. 문자열이 큰 순서대로 정렬하면 될 것 --> 문제점 : 3, 30이 있을 때 330이 아니라 303으로 정렬됨 접근방법 3. 문자열 정렬 비교 시 자릿수를 맞춰준다. - 문자열 중 가장 큰 자릿수를 구해서 맞춰줌 import itertools def solution(..
[알고리즘/프로그래머스] Level 1 끝 ! 파이썬으로 프로그래머스 Level 1 완료 😋 ( 몇문제는 SQL 문제라 오라클로 코드 작성 ) 코드 모음 : Algorithm/programmers/Level1 at master · mingxoxo/Algorithm (github.com) GitHub - mingxoxo/Algorithm: 알고리즘 알고리즘. Contribute to mingxoxo/Algorithm development by creating an account on GitHub. github.com 문제 : 코딩테스트 연습 | 프로그래머스 (programmers.co.kr) + 2022.01.28 신고 결과 받기 | 프로그래머스 (programmers.co.kr)

반응형