알고리즘 공부 597

백준 2628번 종이자르기 파이썬

리뷰처음 문제를 어떻게 접근해야 할지 막막했다. 2차원 배열을 생성해서 insert를 해줄까? 싶다가 너무 산으로 가는 것 같아서 조금 더 간단하게 생각해 보도록 했다.문제 풀이종이의 크기 x, y를 받고 가로와 세로 배열을 초기화 해 준다. 각 배열에 초기 인덱스값 0과 x 또는 y를 넣어주고 이후 자르는 좌표를 각 배열에 append 해준다. 모든 입력을 받았다면 가로 세로 배열을 각각 오름차순으로 정렬해 주고 해당 배열 내에서 길이가 가장 긴 값을 구해준 후 서로 곱해주면 최대 넓이가 된다.가장 긴 값을 구하는 방법은 가로 세로 최대치를 저장할 변수를 초기화 해준 다음 정렬된 배열 내에서 인접한 두 인자의 차와 기존의 최대치를 비교하여 더 높은 값을 최대치로 갱신해 주면 된다.참고 사항종이의 크기를..

백준 8320번 직사각형을 만드는 방법 파이썬

리뷰처음엔 조금 막막했으나 알고리즘 분류가 수학인 만큼 점화식이 있을 거라고 생각했고 규칙을 찾아낸 후엔 문제를 쉽게 풀 수 있었다.문제 풀이n12345678910111213result12356891113151619201부터 13까지의 수를 대입해 보았을때 처음엔 피보나치 수열인가? 생각했으나 별다른 규칙성을 찾지 못했다. 그래서 노가다를 시작했다.n■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■n // 2 - 1■■■■■■■■■■■■■■■■■■      n // 3 - 2■■■■■■■■■        위의 표는 N이 9일때의 직사각형을 만들 수 있는 경우의 수이다. N이 4일때와 9일때 새로운 모습의 정사각형을 만들 수 있다는 것을 깨닫고 위와 같은 점화식을 세울 수 ..

백준 10163번 색종이 파이썬

리뷰상위 난이도 문제인 색종이와 색종이-2 보다 평면의 길이가 커서 시간 초과가 나지 않을까 했지만 다행히 시간초과가 나진 않았다. 해당 문제를 이해하고 색종이와 색종이-2에 접근한다면 해당 문제들을 쉽게 풀 수 있을 것 같다.문제 풀이마지막으로 들어온 종이는 온전히 자기 넓이를 가져야 하므로 각 좌표와 넓이를 리스트로 받아와 준 후 한번 reverse를 해 주었다. 1001 * 1001 크기의 2차원 배열을 생성해준 후 해당 위치의 값이 0일 경우 1로 변경해줌과 동시에 넓이를 1 더해주었다. 그리고 내부 for문이 종료될 때 얻은 넓이 값을 별도의 리스트에 저장, 모든 종이의 넓이를 구해준 후 넓이가 저장된 리스트를 다시 reverse하여 각각의 넓이를 출력해 주었다.추천 반례없음정답 코드def q1..

백준 2567번 색종이 - 2 파이썬

리뷰구현 문제를 오랜만에 접해서 그런지 많이 헤매었다. 색종이 넓이 구하는 문제보다는 난이도가 높은 것 같았다.문제 풀이100 * 100 크기의 2중 배열을 0으로 초기화 해준 후 입력 받은 x, y좌표 값의 +10만큼을 모두 1로 바꾸어 주었다.이후 이중 for문을 통해 해당 좌표가 1일 경우 상하좌우로 인접한 좌표의 값이 0일 경우 길이를 더해주었다.문제에 색종이가 도화지 밖으로 나가는 경우는 없다고 정의 하였으므로 가장자리에 인접한 경우도 길이를 더해주었다.추천 반례없음정답 코드def q2567(): # 백준 2567번 색종이 - 2 파이썬 n = int(input()) dp = [[0] * 101 for _ in range(101)] result = 0 for _ in ..

백준 2309번 일곱 난쟁이 파이썬

리뷰브론즈1 문제 치고는 생각보다 어려웠다. 브루트포스 알고리즘 문제를 많이 연습해야 겠다.문제 풀이입력될 난쟁이의 수는 9명으로 고정, 난쟁이 7명의 키를 더했을때 정확히 100이 일치한다면 해당 값을 리턴해주면 된다.즉 9명의 난쟁이 키의 합에서 겹치지 않는 두 난쟁이를 선택하여 해당 난쟁이들의 키를 빼주면 된다.2중 for문을 사용했기에 위 조건을 만족할 경우 해당 난쟁이를 리스트에서 제거해 주고 break를 통해 for문을 빠져나왔다. 주의 : 여기서 실수한 점은 lst[i]와 lst[j]의 값을 a, b와 같은 변수로 초기화 해준 후 remove를 해주어야 한다. 그렇지 않고 lst.remove(lst[i])와 같이 실행했을 경우 lst.remove(lst[j])는 엉뚱한 난쟁이를 리스트에서 제..

백준 10825번 국영수 파이썬

리뷰개인적으로 매우 쉬웠다. 자료구조 정렬 시 람다 함수를 사용할줄 안다면 누구나 쉽게 풀 수 있을 듯문제 풀이학생수와 점수를 리스트로 받아오고 리스트 정렬 시 key값으로 조건에 맞게 정렬해 주었다.특이 사항으로는 점수는 1보다 크거나 같고, 100보다 작거나 같은 자연수이므로 람다 함수 내에서 각 인자를 int로 변환해 주었다. 추천 반례없음정답 코드def q10825(): # 백준 10825번 파이썬 국영수 import sys n = int(sys.stdin.readline()) lst = [sys.stdin.readline().split() for _ in range(n)] lst.sort(key=lambda x: (-int(x[1]), int(x[2]), -int(x[..

백준 16496번 큰 수 만들기 파이썬

리뷰나의 첫번째 플래티넘 문제 도전기였다.자료구조, 그리디 알고리즘, 정렬에는 자신이 있었기에 문제를 읽었을 때 플래티넘 문제가 이렇게 쉽다고? 라는 생각이 들었다.문제풀이처음 생각했을 땐 리스트를 문자열로 받아와 문자열 수로 오름차순 1차 정렬 후 int로 변환 하여 내림차순으로 2차 정렬 하는 방식으로 접근했으나 질문 게시판에 있던 반례에 걸리게 되었다. 그래서 수로 주어질 범위가 10억보다 작거나 같은 음이 아닌 정수이므로 문자열의 길이가 10 이상이 되도록 곱해주어 오름차순으로 정렬 후 마지막에 reverse=True 처리해 주었다. 그렇게 되면 한자릿수의 숫자가 입력 되더라도 0이 아닌 경우 항상 10억 이상의 수가 되기 때문에 예외 케이스 없이 정렬이 되었다. 이후 리스트내 요소를 join 해..

728x90