분류 전체보기 62

[xlwings] 파이썬으로 excel 파일 다루기 (1) quick start

xlwings는 python으로 excel 파일을 생성하거나 읽고, 데이터를 불러와 python의 pandas, numpy, matplotlib 등 라이브러리의 유용한 기능을 활용한 결과물을 다시 excel 파일에 작성할 수 있도록 하는 라이브러리이다. excel을 사용하는 단순 반복 작업을 위한 스크립트 뿐만 아니라 데이터를 다루는 과정에서 결과물을 엑셀 창에 띄우는 등 활용할 수 있는 방법은 무궁무진한 라이브러리이다. excel의 VBA를 python으로 대체할 수 있는 수단으로 활용할 수도 있다. xlwings는 excel이 설치 되어있는 상태에서 사용 가능하기 때문에 실습 및 활용을 위해선 excel이 설치 된 환경에서 가능하다. 따라서 아쉽지만 colab에서는 연습이 불가능하다. 1. 설치 파이..

[python 백준] 1012번 유기농 배추

문제 설명 배추가 심어진 위치는 1, 심어지지 않은 위치는 0으로 표시되어 주어진 map에서 서로 인접한 배추들의 집합이 몇 개 있는지 확인하는 flood fill 문제 고민한 부분 flood fill 문제는 어떤 칸에 연결된 영역을 탐색하는 알고리즘이다. 구현은 BFS나 DFS 등 그래프 탐색 알고리즘을 반복 사용해 풀이하는 것이 많은 것 같다. 이 문제에서는 배열에서 연결된 배추들의 영역의 수를 세야 한다. 이를 위해 배열을 차례로 탐색하며 배추가 심어진 위치에 도달했을 때 BFS 알고리즘으로 인접한 영역을 탐색하고 BFS 실행 횟수를 반환하도록 구현했다. 이미 탐색한 영역을 중복 count하는 것을 방지하기 위해 어떤 표시를 해야했다. 배추 밭과 같은 크기의 배열을 만들어 표시를 할 수도 있지만 배..

[백준 python] 14499번 주사위 굴리기

문제 링크 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지 www.acmicpc.net 문제 설명 일정한 규칙에 따라 이동하는 주사위가 획득하는 점수를 계산하는 문제 주사위 방향을 전환하는 규칙과 주사위의 숫자를 바꾸는 규칙만 이해하면 어렵지 않게 풀 수 있는 문제 고민한 부분 주사위의 상태를 나타내기 위한 방법을 고민했다. 다른 분들의 풀이를 보면 길이 6의 list로 만들어 index별로 의미를 부여해 문제를 해결했는데 나는 헷갈려서 각각의 위치에 해당하는 6개의 변수를..

[알고리즘] 그래프 탐색 알고리즘, BFS와 DFS

그래프와 탐색 알고리즘 그래프는 대상들의 관계를 나타낼 때 적합한 자료구조로 대상 나타내는 node 또는 vertex들과 그들의 연결 관계를 나타내는 Edge로 표현할 수 있다. 그래프는 edge가 탐색할 수 있는 방향의 존재 여부와 가중치의 여부에 따라 크게 네 가지 종류로 구분할 수 있다. 무향 그래프 : edge의 방향이 없는 그래프 유향 그래프 : edge에 방향이 있는 그래프 가중치 무향 그래프 : edge에 방향은 없으나 가중치가 있는 그래프 가중치 유향 그래프 : edge에 방향과 가중치가 있는 그래프 행렬의 행은 출발하는 node의 숫자, 열을 도착하는 node의 숫자로 그래프를 표현할 수 있다. 아래의 예는 유향 그래프를 행렬로 표현한 것을 나타낸 예시이다. 1번 node는 2와 3으로 ..

[C++] pair class 사용법

pair class pair class는 사용자가 지정한 임의의 타입의 데이터 2개를 저장하는데 사용할 수 있음 같은 타입의 데이터를 저장할 수도 있고, 서로 다른 타입의 데이터를 저장할 수 있다. pair 클래스를 사용함으로써 연관된 데이터를 다룰 때 구조체를 정의하는 번거로움을 덜 수 있다. pair 클래스는 utility 헤더에 존재하는 STL이지만 많이 사용하는 vector 헤더 파일에 포함되어 있다. pair 클래스 사용 #include // pair 선언 pair p; p.first; // 첫번째 요소에 접근 p.second; // 두번쨰 요소에 접근

[python 백준] 2630번 색종이 만들기

문제 링크 문제 설명 얼룩 덜룩한 색종이를 절반씩 잘라가며 한가지 색으로만 이뤄진 정사각형 모양의 색종이가 나올 때 까지 계속해서 자른 후 흰색과 파란색 색종이의 수를 각각 구하는 것 고민한 부분 반복문을 중첩해 풀이하려고 시도를 했으나 전체 종이의 크기에 따라 반복 횟수가 달라지기 때문에 반복문으로 풀이하는 것이 어렵다고 판단했다. 지금까지 공부한 내용 안에서 정해지지 않은 횟수의 중첩 반복문제를 해결하는 방법은 $^{1)}$재귀와 $^{2)}$그래프 탐색 알고리즘(BFS, DFS)가 있다. 문제를 분석해 보았을 때 DFS나 BFS로 탐색할 수 있는 그래프 형태로 만들 수 있는 방법을 떠올리지 못했다. 반복되는 부분을 찾아 재귀 함수로 문제를 구현하기로 생각했다. 나는 재귀 함수를 구현할 때는 종료 조..

[python 백준] 1463번 1로 만들기

문제 링크 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 문제 설명 입력으로 받는 수 x에 대해 세 가지 종류의 연산을 반복해 1로 만들 수 있는 방법 중 연산 횟수가 가장 작은 방법의 연산 수를 찾는 문제 연산의 종류는 다음과 같다. x가 3으로 나누어 떨어지면, 3으로 나눈다. x가 2로 나누어 떨어지면, 2로 나눈다. 모두 해당 없으면 1을 뺀다. 고민한 부분 단순하게 생각해 숫자를 가장 빠르게 줄일 수 있는 연산 순서로 조건을 확인하도록 구현했다가 틀렸다. 연산 횟수의 수열이 증가하는 수열이 아니기 때문에 어떤 연산을 적용하는 것이 가장 좋은지 알 수 없다. 1부터 x까지 거꾸로 거슬러 올라가며 그 사이에 있는 값..

[알고리즘] 다이나믹 프로그래밍

다이나믹 프로그래밍이란 dynamic programming은 최적의 답을 찾기 위한 수학적인 개념으로 복잡한 문제를 간단한 문제의 sequence로 변형해 풀이하는 divide and conquer 최적화 방법 중 하나이다. divide and conquer 방법의 단점은 동일한 계산을 반복해서 수행해야하는 단점이 있는데 중간 계산 결과를 저장해 한 번만 계산하도록 하는 memoization으로 이 문제를 극복합니다. dynamic programming을 적용할 수 있는 문제는 '최적성 원리'가 성립하는 문제다. 최적성의 원리는 문제 전체의 최적해가 작은 부분의 최적해로 구성될 때 성립한다. 이 경우 문제를 점화식 형태로 구성해 풀이한다. 피보나치 수열 피보나치 수열은 첫 두 항이 1로 시작하고, 연속된..

[자료구조] Queue과 Stack

자료구조 자료구조는 자료들의 집합을 체계적이고 효율적으로 관리하기 위한 형식 자료구조는 자료 집합, 규칙, 조작으로 개념을 나누어 이해하는 것이 좋다. 자료 집합 : 대상이 되는 자료의 본체를 의미함. 배열, 구조체 등 자료를 저장할 수 있는 본체 규칙 : 자료 집합을 조작, 관리, 유지하기 위해 정한 규칙 조작 : 자료 집합에 직접 적용하는 처리를 의미함 stack, queue, linked list, tree 등 다양한 종류의 자료구조가 존재하고 필요와 목적에 따라 적합한 자료구조를 선택해 사용한다. Queue Queue는 C의 array나 python의 list를 자료집합으로 사용할 수 있다. python에는 collections 라이브러리에 dequeue type을 사용하면 queue를 쉽게 구현..

[백준 python] 23288번 주사위 굴리기 2

문제 링크 23288번: 주사위 굴리기 2 크기가 N×M인 지도가 존재한다. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다. 가장 왼 www.acmicpc.net 문제 설명 일정한 규칙에 따라 이동하는 주사위가 획득하는 점수를 계산하는 문제 주사위 방향을 전환하는 규칙, 점수를 계산하는 규칙을 꼼꼼하게 읽고 풀이하면 어렵지 않게 풀 수 있는 문제 고민한 부분 주사위의 상태를 나타내기 위한 방법을 고민했다. 다른 분들의 풀이를 보면 길이 6의 list로 만들어 index별로 의미를 부여해 문제를 해결했는데 나는 헷갈려서 각각의 위치에 해당하는 6개의 변수를 만들어 주사위를 modeling하는 것이..