반응형
반응형
가상환경(virtualenv)은 여러 개의 파이썬 프로젝트가 하나의 컴퓨터에서 충동을 일으키지 않고 존재할 수 있도록 해줍니다. virtualenv는 각 프로그램별로 완전히 독립적인 가상의 환경을 만들어서 각 프로그램별로 라이브러리 모듈등의 버전을 별도로 지정할 수 있게 합니다. 즉 한 컴퓨터에 여러 개발환경을 서로 독립적으로 설치, 실행할 수 있게 해줍니다.
왜 가상 환경을 만들어서 작업을 진행할까? 한마디로 요약하자면 "독립적인 작업환경에서 작업할 수 있다." 로 말할 수 있습니다.
프로젝트를 진행하다보면 여러 라이브러리, 패키지를 다운로드하여서 사용하게 됩니다. 그러다 보면 각 라이브러리들끼리 충돌을 일으키는 문제를 발생시키는 경우가 있습니다. 또는, 특정 버전과 호환하는 경우가 생겨서 최신 버전과 이전 버전 중 선택해야 하는 상황이 발생됩니다. 가상환경은 각 프로그램별로 라이브러리 모듈 등의 버전을 별도로 지정할 수 있게 합니다. 즉 한 컴퓨터에 여러 개발환경을 서로 독립적으로 설치, 실행할 수 있게 해줍니다.
 
다음 명령어를 통해 가상환경이 만들어 집니다.
 
>conda create -n <환경명> python=<버전(ex:3.5이나 3.7 등)>
 
본 교재의 모든 예제들은 다음과 같은 명령으로 만들어 실행하도록 합니다. 본인 스스로 가상 환경을 관리할 수 있다면 다른 이름을 사용해도 관계없습니다.
 
>conda create -n koreait python=3.7
 
- koreait 은 가상환경 이름을 의미합니다.
- python=3.7 는 파이썬 3.7 환경으로 가상환경을 만들어라 하는 것 입니다. 다른 패키지들과의 호환성을 위해 본 교재는 파이썬 3.7를 사용합니다.
- numpy ~ statsmodels : 사용해야 할 라이브러리들을 지정할 수 있습니다. 필요시 pip install 을 사용하여 개별적으로 설치 할 수도 있습니다.
위의 명령을 실행하면 "c:\users\사용자계정\anaconda3\env\koreait" 라는 디렉토리가 생성되면서 그 안에 필요한 것들을 설치하겠냐고 묻게 됩니다. 당연히 "y" 를 눌러서 설치를 합니다.
내가 제대로 환경을 만들었는지 다음 명령을 실행하여 확인합니다.
>conda env list
내가 만든 환경이 리스트에 존재한다면 성공적으로 만들어 진 것입니다.
이후에 가상환경을 활성화하고 싶으면 activate 명령어로 해당 가상환경을 활성화합니다.
activate 가상환경명 혹은 conda activate 가상환경명
>conda activate koreait
>activate koreait
(base)표시가 (koreait) 으로 변경되었음을 볼 수 있습니다.
비활성화 시키고 싶으면 koreait 이 활성화되어 있는 상태에서
>deactivate 혹은 >conda deactivate
라고 해 주면 됩니다.
가상 환경을 제거하고 싶으면 아나콘다 터미널에서 (base)환경을 확인하고 다음을 입력한 후 실행하면 됩니다.
>conda remove -n name --all
만들어진 koreait 환경을 제거하고 다시 설치하고 싶다면 다음 명령으로 가상환경을 제거하고 다시 만들어 주시면 됩니다.
(base)>conda remove -n koreait --all
Anaconda Prompt에서 (koreait )이 표시되어 있다면 deactivate 를 입력하여 (base)환경으로 돌아옵니다. (base) 환경에서 python --version 을 실행해 봅니다. 그리고 “conda activate koreait ” 명령으로 가상환경 (koreait )을 활성화시킨 후 python --version 을 실행해 봅니다. (base) 환경에서 파이썬 버전은 3.7.2 이고 (koreait ) 환경에서 파이썬 버전은 3.5.6 이 적용됨을 확인할 수 있습니다.
가상환경 (koreait )에서 파이썬이 제대로 동작하는지 “Hello Workd” 예제를 사용하여 확인해 보자.
Anaconda Prompt에서 (koreait ) 환경에서 “python”을 입력합니다.
>>> 표시가 나타나면 print(“Hello World”) 를 입력하고 엔터를 누릅니다.
 
반응형
반응형

import sys; 
input = sys.stdin.readline

def bip_match(n, m): # 이분 매칭
    for nn, mm in [(n, m - 1), (n, m + 1), (n - 1, m - 1), (n - 1, m + 1), (n + 1, m - 1), (n + 1, m + 1)]: # 6방향으로 탐색
        if 0 <= nn < N and 0 <= mm < M and not visited[nn][mm] and seat[nn][mm]:
            visited[nn][mm] = True
            if connect[nn][mm] == [-1, -1] or bip_match(connect[nn][mm][0], connect[nn][mm][1]):
                connect[nn][mm] = [n, m]       
                return True
    return False

for _ in range(int(input())):
    N, M = map(int, input().split())
    matrix = [input().strip() for _ in range(N)]
    
    seat = [[False] * M for _ in range(N)] # 앉을 수 있는 자리인지 저장하기 위한 행렬
    answer = 0
    for n in range(N):
        for m in range(M):
            if matrix[n][m] == '.':
                seat[n][m] = True
                answer += 1 # 앉을 수 있는 자리이면 seat 갱신해주고 answer에 자리 수 저장
                
    connect = [[[-1] * 2 for _ in range(M)] for __ in range(N)] # 각 자리 별 연결 위치를 저장하는 행렬
    for n in range(N):
        for m in range(0, M, 2): # 여기서 짝수로 해도 되고 홀수로 해도 된다. 물론, 둘 다 하면 안된다.
            if seat[n][m]:
                visited = [[False] * M for _ in range(N)]
                if bip_match(n, m):
                    answer -= 1 # 이분 매칭이 될 때마다 앉을 수 있는 자리가 하나씩 줄어든다
                    
    print(answer)

# 출처 : https://velog.io/@vkdldjvkdnj/boj01014

 

""" [백준] 1014번 컨닝  Cheating - PYTHON
    https://www.acmicpc.net/problem/1014
    문제
        최백준은 서강대학교에서 “컨닝의 기술”이라는 과목을 가르치고 있다. 이 과목은 상당히 까다롭기로 정평이 나있기 때문에, 몇몇 학생들은 시험을 보는 도중에 다른 사람의 답지를 베끼려 한다.
        시험은 N행, M열 크기의 직사각형 교실에서 이루어진다. 교실은 1×1 크기의 단위 정사각형으로 이루어져 있는데, 각 단위 정사각형은 자리 하나를 의미한다.
        최백준은 컨닝을 방지하기 위해서 다음과 같은 전략을 세웠다. 모든 학생은 자신의 왼쪽, 오른쪽, 왼쪽 대각선 위, 오른쪽 대각선 위, 이렇게 총 네 자리에 앉아있는 친구의 답지를 항상 베낀다고 가정한다. 따라서, 자리 배치는 모든 학생이 컨닝을 할 수 없도록 배치되어야 한다.
        위의 그림을 보자. A, C, D 혹은 E에 다른 학생을 앉히는 것은 좋은 생각이 아니다. 그 이유는 이미 앉아있는 학생이 그들의 답안지를 베낄 우려가 있기 때문이다. 하지만, B에 다른 학생을 앉힌다면, 두 학생은 서로의 답지를 베낄 수 없어 컨닝의 우려가 없다.
        위와 같이 컨닝이 불가능하도록 자리를 배치 하려는 최백준의 행동에 분노한 일부 학생들이 교실의 책상을 부숴버렸기 때문에, 일부 자리에는 학생이 앉을 수 없다.
        최백준은 교실의 모양이 주어졌을 때, 이 곳에서 아무도 컨닝을 할 수 없도록 학생을 배치하였을 경우에 교실에 배치할 수 있는 최대 학생 수가 몇 명인지 궁금해졌다. 최백준을 위해 이를 구하는 프로그램을 작성하라.
    입력
        입력의 첫 줄에는 테스트케이스의 개수 C가 주어진다. 각각의 테스트 케이스는 아래와 같이 두 부분으로 이루어진다.
        첫 번째 부분에서는 교실의 세로길이 N과 가로길이 M이 한 줄에 주어진다. (1 ≤ M ≤ 10, 1 ≤ N ≤ 10)
        두 번째 부분에서는 정확하게 N줄이 주어진다. 그리고 각 줄은 M개의 문자로 이루어져있다. 모든 문자는 ‘.’(앉을 수 있는 자리) 또는 ‘x’(앉을 수 없는 자리, 소문자)로 구성된다.
    출력
        각각의 테스트 케이스에 대해 그 교실에서 시험을 볼 수 있는 최대 학생의 수를 출력한다.
        
예제 입력 
    4
    2 3
    ...
    ...
    2 3
    x.x
    xxx
    2 3
    x.x
    x.x
    10 10
    ....x.....
    ..........
    ..........
    ..x.......
    ..........
    x...x.x...
    .........x
    ...x......
    ........x.
    .x...x....
    
예제 출력  
    4
    1
    2
    46   

>> BOJ\1014_Cheating.py
4
2 3
...
...
4
2 3
x.x
xxx
1
2 3
x.x
x.x
2
    
"""

반응형
반응형

구글 포토에서 모든 사진을 다운로드받는 방법 

 

구글 포토에서 사진 전체 다운로드하기

 

ⓒ ITWorld 
구글 포토에 저장된 모든 사진을 다운로드하려면, 우선 구글 포토에 웹 브라우저로 로그인하고 오른쪽 위의 기어 모양 아이콘을 클릭해 설정 메뉴로 들어간다. 설정 페이지에서 ‘데이터 내보내기’ 항목을 찾아 아래로 향한 화살표를 클릭하고, ‘백업’ 링크를 클릭한다.
 

ⓒ ITWorld
그러면 구글 서버에 저장된 데이터를 다운로드하는 서비스인 ‘Google 테이크아웃’ 페이지로 이동한다. 구글 포토를 통해 해당 페이지로 이동하면 구글 포토가 자동으로 선택되어 나온다. 구글 계정과 연관된 다른 데이터는 포함되지 않는다. 이제 ‘다음 단계’를 클릭한다.

다음 페이지는 파일 형식, 각 아카이브 파일의 크기 등을 설정할 수 있는 화면으로 이동한다.  기본적으로 각 아카이브 폴더는 ZIP 폴더로 압축되지만, TGZ 포맷도 선택할 수 있다. ZIP 파일의 크기는 기본 2GB인데 이 크기도 조정할 수 있다. 단, ZIP 파일의 크기가 작을수록 다운로드가 수월하다. 
 

ⓒ IDG

설정을 마무리하면 ‘내보내기 생성’을 클릭한다. 이제 기다리기만 하면 된다. 구글은 내보내기가 언제 끝날지 예측해주며, 구글 포토에 저장된 사진의 용량에 따라 몇 시간에서 며칠까지 걸린다.
 

구글 포토에서 선택한 사진 다운로드하기

 

ⓒ IDG
사진 몇 장만 선택해서 다운로드하는 방법은 매우 간단하다. 선택하고 싶은 사진에 마우스를 올리고 이미지의 왼쪽 모서리에 체크 표시를 표시한다. 그러면 선택 모드로 들어가며, 스크롤을 하면서 다운로드를 원하는 사진을 같은 방식으로 체크하면 된다. 특정 날짜의 사진 전체를 다운로드하고 싶다면, ‘날짜’ 옆에 체크 표시를 하면 된다. 
 

ⓒ IDG
사진을 모두 선택하면 Shift+d 혹은 마우스로 오른쪽 상단의 3점 아이콘을 클릭해 ‘다운로드’를 선택한다. 그다음 파일 탐색기가 나타나면 ‘저장’을 클릭하면 끝이다. 선택한 사진이 많아서 ZIP 아카이브로 다운로드된다. editor@itworld.co.kr

원문보기:
https://www.itworld.co.kr/news/195414#csidxcb23ff3a17fdf389905e26c9d8264d7 

 

구글 포토에서 모든 사진을 다운로드받는 방법

다가오는 구글 포토의 데이터 한도 정책에 따라 무료 스토리지 용량 안에 머물 수 있도록 지메일, 드라이브, 사진 파일을 관리하는 방법, 구글 포

www.itworld.co.kr

반응형
반응형

""" [백준] 1013번 Contact - PYTHON    
    https://www.acmicpc.net/problem/1013
    문제
        “무한히 넓은 저 우주에 인류만이 홀로 존재한다면, 그건 정말 슬픈 일이 아닐까요”
        푸에르토리코 아레시보에 위치한 아레시보 전파망원경(Arecibo radio telescope)은 수십 년째 존재하지 않을 지도 모르는 외계 문명으로부터의 전파를 수신하기 위해 밤하늘을 바라보고 있다.
        이 망원경이 수집한 전파 속에서 자연적으로 발생하기 힘든 패턴들을 찾아내어, 그것을 증거로 외계 문명의 존재 여부를 가리려는 노력은 줄곧 이어져왔지만 아직까지도 그러한 패턴은 발견되지 않았다. 한국 천문학계의 자존심 김동혁 박사는 국내 기술로 이러한 탐사를 진행하기 위하여 다음의 전파 표기를 표준으로 삼았다.
        전파의 기본 단위는 { 0 , 1 } 두 가지로 구성되어있으며, x+ (  ) 는 임의의 개수(최소 1개) x의 반복으로 이루어진 전파의 집합을 나타낸다.
        (xyx)+ (  ) 는 괄호 내의 xyx의 반복으로 이루어진 전파의 집합을 뜻한다. 아래는 이해를 돕기 위한 예제이다.
        1+ = { 1, 11, 111, 1111, 11111, … }
        10+ = { 10, 100, 1000, 10000, 100000, … }
        (01)+ = { 01, 0101, 010101, 01010101, 0101010101, … }
        (1001)+ = { 1001, 10011001, 100110011001, … }
        10+11 = { 1011, 10011, 100011, 1000011, 10000011, … }
        (10+1)+ = { 101, 1001, 10001, 1011001, 1001101, 100011011000001, … }
        반복을 의미하는 + 외에도 or 를 의미하는 | 기호가 있다. { x | y } 는 x 혹은 y 를 의미하는 것으로, { 0+ | 1+ } 는 { 0 , 1 , 00 , 11 , 000 , 111 , … } 의 집합을 의미한다. 아래는 두 기호를 복합적으로 사용한 예이다.
        (100 | 11)+ = { 100 , 11 , 10011 , 11100 , 1110011100 , 100111111100100, … }
        최근 김동혁 박사는 아레시보 전파망원경에서 star Vega(직녀성) 으로부터 수신한 전파 기록의 일부를 조사하여 그 전파들의 패턴을 분석하여 아래와 같이 기록하였다.
        (100+1+ | 01)+
        김동혁 박사는 다양한 전파 기록 중에서 위의 패턴을 지니는 전파를 가려내는 프로그램을 필요로 한다. 이를 수행할 수 있는 프로그램을 작성하라.
    입력
        입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 전파를 표현하는, { 0, 1 }만으로 이루어진 문자열이 공백 없이 주어진다. 문자열 길이는 (1 ≤ N ≤ 200)의 범위를 갖는다.
    출력
        각 테스트 케이스에 대해 주어진 전파가 문제에서 제시한 패턴이면 “YES”를 그렇지 않은 경우는 “NO”를 출력한다. 출력 문자열은 모두 대문자로 구성되어 있다.
        
    예제 입력  
        3
        10010111
        011000100110001
        0110001011001
    예제 출력  
        NO
        NO
        YES
        
        
>> BOJ\1013_Contact.py
3
10010111
NO
011000100110001
NO
0110001011001
YES
          
re 모듈 : 정규식 엔진에 대한 인터페이스를 제공
compile 메소드: 정규식 패턴 입력
fullmatch 메소드: 입력된 패턴과 문자열이 남는 부분 없이 완벽하게 일치하는지 검사. 일치하지 않으면 None.
"""

import re
import sys
input  = sys.stdin.readline

p = re.compile('(100+1+|01)+')
for i in range(int(input())):
   s = input().strip()
   if p.fullmatch(s):
       print("YES")
   else:
       print("NO")

반응형
반응형

[백준] 1012번 유기농 배추 - PYTHON  

 

 https://www.acmicpc.net/problem/1012

 

1012번: 유기농 배추

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 

www.acmicpc.net

T = int(input()) #테스트케이스의 개수

dx = [-1,1,0,0]
dy = [0,0,-1,1]

def BFS(x,y):           
    queue = [(x,y)]
    matrix[x][y] = 0 # 방문처리

    while queue:
        x,y = queue.pop(0)

        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]

            if nx < 0 or nx >= M or ny < 0 or ny >= N:
                continue

            if matrix[nx][ny] == 1 :
                queue.append((nx,ny))
                matrix[nx][ny] = 0

# 행렬만들기
for i in range(T):
    M, N, K = map(int,input().split())
    matrix = [[0]*(N) for _ in range(M)]
    cnt = 0

    for j in range(K):
        x,y = map(int, input().split())
        matrix[x][y] = 1

    for a in range(M):
        for b in range(N):
            if matrix[a][b] == 1:
                BFS(a,b)
                cnt += 1

    print(cnt)

 

>1012_OrganicCabbage.py 
1
5 3 6
0 2
1 2
2 2
3 2
4 2
4 0
2
반응형
반응형

[백준] 1011번 FlymetotheAlphaCentauri - PYTHON


    Fly me to the Alpha Centauri
    https://www.acmicpc.net/problem/1011
 

  
    문제
         우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 
        그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행사가 되어 새로운 세계에 발을 내려 놓는 영광의 순간을 기다리고 있다.
         그가 탑승하게 될 우주선은 Alpha Centauri라는 새로운 인류의 보금자리를 개척하기 위한 대규모 생활 유지 시스템을 탑재하고 있기 때문에, 
        그 크기와 질량이 엄청난 이유로 최신기술력을 총 동원하여 개발한 공간이동 장치를 탑재하였다. 
        하지만 이 공간이동 장치는 이동 거리를 급격하게 늘릴 경우 기계에 심각한 결함이 발생하는 단점이 있어서, 
        이전 작동시기에 k광년을 이동하였을 때는 k-1 , k 혹은 k+1 광년만을 다시 이동할 수 있다. 
        예를 들어, 이 장치를 처음 작동시킬 경우 -1 , 0 , 1 광년을 이론상 이동할 수 있으나 사실상 음수 혹은 0 거리만큼의 이동은 의미가 없으므로
        1 광년을 이동할 수 있으며, 그 다음에는 0 , 1 , 2 광년을 이동할 수 있는 것이다. ( 여기서 다시 2광년을 이동한다면 다음 시기엔 1, 2, 3 광년을 이동할 수 있다. )
         김우현은 공간이동 장치 작동시의 에너지 소모가 크다는 점을 잘 알고 있기 때문에 x지점에서 y지점을 향해 최소한의 작동 횟수로 이동하려 한다. 
        하지만 y지점에 도착해서도 공간 이동장치의 안전성을 위하여 y지점에 도착하기 바로 직전의 이동거리는 반드시 1광년으로 하려 한다.
        김우현을 위해 x지점부터 정확히 y지점으로 이동하는데 필요한 공간 이동 장치 작동 횟수의 최솟값을 구하는 프로그램을 작성하라.
    입력
        입력의 첫 줄에는 테스트케이스의 개수 T가 주어진다. 각각의 테스트 케이스에 대해 현재 위치 x 와 목표 위치 y 가 정수로 주어지며, x는 항상 y보다 작은 값을 갖는다. (0 ≤ x < y < 231)
    출력
        각 테스트 케이스에 대해 x지점으로부터 y지점까지 정확히 도달하는데 필요한 최소한의 공간이동 장치 작동 횟수를 출력한다.


#테스트

t = int(input())

for _ in range(t):
    x, y = map(int,input().split())
    distance = y - x
    count = 0  # 이동 횟수
    move = 1  # count별 이동 가능한 거리
    move_plus = 0  # 이동한 거리의 합
    while move_plus < distance :
        count += 1
        move_plus += move  # count 수에 해당하는 move를 더함
        if count % 2 == 0 :  # count가 2의 배수일 때, 
            move += 1  
    print(count)
반응형

+ Recent posts