Python

    [Python/내장함수] 클래스(=Class) 기본 사용 방법

    [Python/내장함수] 클래스(=class)란?¶ class : 함수 + 변수 모아놓은 것 오브젝트(object) : 클래스를 써서 만든 것 오브젝트(object) == 인스턴스(instance) 클래스를 정의한 후, 그 클래스를 사용해서 데이터 객체(인스턴스)를 만들 수 있다. 동일한 클래스에 의해 만들어진 각 개체들은 유사한 특징을 공유한다. 모든 인스턴스에서 메서드(=코드)는 동일하지만, 속성(데이터)는 다르다. * 메서드 : 코드 * 속성 : 데이터 * 인스턴스 : 클래스에 의해 만들어진 데이터 객체 ¶ * 모든 클래스는 __init__()이라는 특별한 함수를 갖고 있다. * __init__()함수를 이용해서 객체의 처음상태를 직접 정의할 수 있다. In [69]: # Person 클래스를 정의..

    [Python/프로그래머스/2020 KAKAO BLIND RECRUITMENT] 괄호 변환

    출처 : https://programmers.co.kr/learn/courses/30/lessons/60058 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 방법 solution(p)를 해결하기 위해서 3개의 함수를 정의했다. check(array) : array(=리스트)를 입력받아서 올바른 괄호 문자인지 아닌지 여부(T/F)를 return 한다. split_uv(array) : array(=리스트)를 입력받아서 u와 v를 분리해준다. u와 v를 return 한다. dfs(array) : array(=리스트)를 입력받아서 올바른 괄호 문자로 ..

    [Python/프로그래머스/2020 KAKAO BLIND RECRUITMENT] 문자열 압축

    출처 : https://programmers.co.kr/learn/courses/30/lessons/60057 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 새로 알게 된 것 >>> s = "interesting" >>> y = s[ : 1000] >>> print(y) "interesting" cs y = s[:1000] 처럼 문자열 슬라이싱 할 때 인덱스 에러가 일어날 것이라고 생각했었는데 그렇지 않았다. Code *주의 : 문자열(s)의 길이가 1인 경우를 간과했었는데, 아마 테스트 케이스 5번의 경우에 해당하는 것 같다. 문자열의 길이가 1인 경우..

    [Python] 백준 13459번: 구슬 탈출

    출처 : https://www.acmicpc.net/problem/13459 13459번: 구슬 탈출 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' 로 이루어져 있다. '.'은 빈 칸을 의미하고, '#'은 공이 이동할 수 없는 장애물 또는 벽을 의미하며, 'O'는 구멍의 위치를 의미한다. 'R'은 빨간 구슬의 위치, 'B'는 파란 구슬의 위치이다. 입력되는 모든 보드 www.acmicpc.net brute force하게 풀려고 작정하면 이렇게 코드가 길어질수도 있구나 코드의 bfs함수를 자세히 보면 #왼쪽 / #오른..

    [Python] 백준 2583번: 영역 구하기

    출처 : https://www.acmicpc.net/problem/2583 2583번: 영역 구하기 첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오른쪽 위 꼭짓점의 x, y좌표값이 빈칸을 사이에 두고 차례로 주어진다. 모눈종이의 왼쪽 아래 꼭짓점의 좌표는 (0,0)이고, 오른쪽 위 꼭짓점의 좌표는(N,M)이다. 입력되는 K개의 직사각형들이 모눈종이 전체를 채우는 경우는 없다. www.acmicpc.net 문제 설명 M X N 크기의 모눈종이가 있다. (M, N

    [Python] 백준 2933번: 미네랄

    출처 : https://www.acmicpc.net/problem/2933 2933번: 미네랄 창영과 상근은 한 동굴을 놓고 소유권을 주장하고 있다. 두 사람은 막대기를 서로에게 던지는 방법을 이용해 누구의 소유인지를 결정하기로 했다. 싸움은 동굴에서 벌어진다. 동굴에는 미네랄�� www.acmicpc.net 문제 설명 창영(=왼쪽), 상근(=오른쪽)이가 번갈아가며 막대기를 던진다. 막대를 던지기 전에 던질 높이를 정한다. 막대는 땅과 수평을 이루며 날아간다. 막대가 미네랄을 만나면, 미네랄은 없어지고 막대기도 그자리에서 소멸된다. 클러스터 : 미네랄 집합이라고 생각하면 된다. 동 서 남 북 으로, 서로 연결되어 있으면 하나의 클러스터이다. 미네랄이 부서짐에 따라, 새로운 클러스터가 생성될 수 있다. 새..

    [Python] 백준 17140번: 이차원 배열과 연산

    출처 : https://www.acmicpc.net/problem/17140 17140번: 이차원 배열과 연산 첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다. www.acmicpc.net R연산과 C연산을 따로 만들 필요가 없다. C 연산 : 2차원 배열을 Transpose → R 연산 → Transpose r, c, k 를 입력받으면 board[r-1][c-1] = k 인지 확인한다. 혹은 시간이 100을 넘어서는지 확인한다. Python으로 2차원 배열을 Transpose하는 것은 쉽다. list(map(list, zip(*board))) 를 해보자. (b..

    [Python/내장함수] zip함수와 *args, **kwargs 란?

    [Python] zip함수와 파라미터 앞에 *, **는 어떤 의미인가?¶ zip함수는 동일한 개수로 이루어진 자료형을 묶어주는 역할을 한다. 동일한 위치에 있는 요소들을 가져와서 함께 묶어주는 것 같다. 나중에, 2차원 배열과 관련해서 열(=col)들을 가져올때 zip을 사용하면 유용할 것 같다. [이유] 2차원 배열에서 각 행(=row)들은 인덱스를 통해서 가져오는 것이 쉽지만, 일반적인 방법으로 열(=col)을 가져오기 위해서는 for문이 필요하다. ex) 서로 다른 2개의 자료형을 묶어보자. In [1]: A = [1,2,3] B = [4,5,6] In [2]: for node in zip(A, B): print(node, type(node)) (1, 4) (2, 5) (3, 6) In [3]: f..

    [Python/내장함수] lambda, map, filter, reduce 함수 사용법

    [Python] lambda 함수, map 함수, filter 함수, reduce 함수 사용법¶ 1. lambda 함수 사용법¶ lambda 함수 - lambda 매개변수 : 표현식 - 함수명 필요 없음 - 한줄로 표현 가능한 함수 - 일반적인 함수처럼 정의해두고 필요할때마다 가져와서 쓰는것이 아니라, 필요한 곳에서 즉시 사용하고 버리는 일시적인 함수 - filter(), map(), reduce()등과 함께 사용하면 많은 응용이 가능해진다. 일반적인 함수 In [5]: def multiply(a, b): return a*b multiply(2, 3) Out[5]: 6 함수 대신 lambda 사용 In [6]: (lambda a,b : a*b)(2, 3) Out[6]: 6 lambda를 변수에 넣어서 재..

    [Python/기타] 알고리즘(set을 이용한) 시간초과에 도움이 되는 팁

    [Python] 알고리즘 문제 시간초과 발생했을때 팁 (bfs관련)¶ 백준의 인구이동 문제를 풀다가 시간초과 문제를 해결하기 위해 많은 방법을 써봤지만 늘 쓰던 방법들로는 시간초과문제를 해결할 수 없었다. 그와 관련해서 어떤 방식이 시간에 영향을 주는지 알아보기위해 간단한 테스트를 해봤다. bfs같은 문제를 풀때 if node not in visited:처럼 해당 원소가 어떤 저장공간(ex. 리스트, 집합 등등)에 존재하는가? 이런 문제를 다뤄야 할때, 어떻게 해야 시간초과를 해결할 수 있을까? In [11]: ## 1번 set ## a의 요소들을 (x, y)와 같이 저장하자. a = set() for i in range(500): for j in range(500): a.add((i, j)) In [1..