파이썬

알고리즘/BOJ

[백준/파이썬] 9465번 스티커

solved.ac Class 4레벨에 속한 문제이다. 문제 주소: https://www.acmicpc.net/problem/9465 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net 문제 해석 스티커를 떼어내 최대의 점수를 얻어야 한다. 이때 스티커를 떼면 상하좌우에 존재하는 스티커가 함께 떼어지고, 함께 떼어진 스티커는 점수를 획득하지 못한다. 얻을 수 있는 최대의 점수를 구하는 문제이다. 문제 풀이 dp를 이용해서 해결해 주었다. j열의 새로운 스티커를 선택할 때 j - 1열의 반대 행의 점수 j..

알고리즘/BOJ

[백준/파이썬] 1991번 트리 순회

solved.ac Class 4레벨에 속한 문제이다. 문제 주소: https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net 문제 해석 이진 트리를 구현해서 전위, 중위, 후위 순회의 결과를 출력하는 문제이다. 문제 풀이 친절하게 문제에서 전위, 중위, 후위 순회의 결과와 알고리즘을 설명해 주었다. class Node: def __init__(self, name): self.name = name self.left = None self.right..

알고리즘/BOJ

[백준/파이썬] 1074번 Z

solved.ac Class 3레벨에 속한 문제이다. 문제 주소: https://www.acmicpc.net/problem/1074 1074번: Z 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 www.acmicpc.net 문제 해석 주어진 문제의 설명과 같다. 문제 풀이 분할 정복 문제이다. ㅁㅁ 1 2 ㅁㅁ 3 4 위 모양과 순서를 기준으로 숫자가 차례대로 증가하기 때문에 구하려는 행과 열이 속한 영역을 분할 정복을 통해 영역의 크기가 2 * 2가 될 때 까지 찾아준다. 찾아주는 과정에서 number += 4 ** (size - 1) 만큼..

알고리즘/BOJ

[백준/파이썬] 1107번 리모컨

solved.ac Class 3레벨에 속한 문제이다. 문제 주소: https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼 www.acmicpc.net 문제 해석 고장난 리모컨 버튼이 주어진다. 누를 수 있는 버튼은 +, - 버튼과 고장나지 않은 숫자 버튼이다. 해당 리모컨을 주어진 채널에 최소로 도달하는 횟수를 구하는 문제이다. 문제 풀이 이동할 수 있는 채널은 500,000 이지만 숫자를 누르고, (+, -) 버튼을 통해 이동하는 경우의 채널은 1,000,000..

알고리즘/BOJ

[백준/파이썬] 14500번 테트로미노

solved.ac Class 3레벨에 속한 문제이다. 문제 주소: https://www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변 www.acmicpc.net 문제 해석 그림에서 주어진 블럭의 합이 최대가 되는 수를 구하는 문제이다. 이때 블록은 회전이 가능하므로 해당 경우까지 생각해서 문제를 해결해 주어야 한다. 문제 풀이 모든 경우의 수를 구해주었다. 3가지 방향으로 나누어서 구해주었다. 먼저 누워있는 ㅁㅁㅁㅁ 형태의 도형의 최댓값 ㅁㅁㅁ ㅁㅁㅁ 다음과 같은 2 * 3 형태의 도형의 ..

알고리즘/프로그래머스

[프로그래머스 / 파이썬] 숫자 변환하기

프로그래머스 2 레벨 문제이다. 문제 주소: https://school.programmers.co.kr/learn/courses/30/lessons/154538 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해석 딱히 해석할 내용이 없다.. x, y, n이 주어지며 다음과 같은 3가지 규칙이 주어진다. n 더하기 2 곱하기 3 곱하기 위 3가지 규칙을 이용해서 x를 y로 변환하는 최단 연산 횟수를 구하는 문제이다. 문제 풀이 3가지 연산 규칙은 cal 함수를 만들어 따로 구현해주었다. bfs를 통해 같은 연산 횟수 내에서 순차적으로 답을 찾아나가면 ..

알고리즘/프로그래머스

[프로그래머스 / 파이썬] 뒤에 있는 큰 수 찾기

프로그래머스 2레벨 문제이다. 문제 주소: https://school.programmers.co.kr/learn/courses/30/lessons/154539 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해석 주어진 배열에서 가장 가까운 자기 자신보다 큰 수를 구하는 문제이다. 자신보다 큰 수가 없다면 -1을 반환하면 된다. 문제 풀이 자신보다 큰 수를 찾는 문제는 스택 유형인 경우가 많다. 순서대로 삽입되면서 조건에 충족한 수(자신보다 큰 수)가 들어오는 경우에 스택을 비우면 된다. 스택에 순서대로 수를 삽입한다. 스택 최상단의 수보다 큰 수가 ..

알고리즘/프로그래머스

[프로그래머스 / 파이썬] 무인도 여행

프로그래머스 2레벨 문제이다. 문제 주소: https://school.programmers.co.kr/learn/courses/30/lessons/154540 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해석 기본적인 블러드 필 문제이다. 섬의 영역에 숫자가 주어지는데 해당 숫자를 모두 더한 값이 무인도에서 살아남을 수 있는 기간이 된다. 모든 무인도의 머물 수 있는 기간을 오름차순으로 반환하는 문제이다. 문제 풀이 먼저 쉽게 이동하도록 하기 위해 1차원 형태의 maps를 2차원 형태로 변형해 주었다. bfs를 통해 블러드 필로 구역을 탐색하였고,..

Study/Python

[Python] 파이썬 코딩테스트 시간 단축하기

입출력 stdin 사용하기 input = __import__('sys').stdin.readline 해당 코드를 통해 입력받는다면 빠른 입력을 받을 수 있다. 반복문 for i in list: arr = [1, 2, 3, 4] for i in range(len(arr)): print(arr[i]) # 직접 접근 for i in arr: print(i) 리스트의 원소를 순회할 때 인덱스가 아닌 직접 접근한다면 시간을 단축할 수 있다. (인덱스가 필요없을 때 사용하면 유용하다.) 아는대로 추가 예정...

Study/Python

[Selenium] 페이지를 스크롤하며 무한 크롤링 하기

이번에는 페이지 스크롤 기능을 사용하여 로딩되는 대상들을 크롤링해 보았다. 생각보다 뜻대로 되지 않아 오래 걸렸다.. 스크롤 방법 스크롤 방법에는 간단하게 3가지 방법이 있다고 한다. 1. 페이지의 높이를 계산해서 최하단으로 이동하는 방법. 2. 키보드의 PAGE_DOWN이나 END, 아래 화살표 키를 반복적으로 눌러 페이지를 내려가는 방법 3. ActionChains의 move_to_element를 이용하여 하단의 요소로 이동하는 방법 1번은 로딩시간이 걸릴 때 오류가 생길 수 있기 때문에 시간 텀을 주어야 한다. 3번은 크롤링할 대상인 페이지에서 최하단의 요소를 찾기 힘들었다.. 따라서 2번의 방법으로 구현해 보았다. from selenium.webdriver.common.keys import Key..