노벨상 수상 발표를 듣고 난 다음 기자들이 찾아와 수상 소감을 한마디 해달라는 요청에 대해 그는 다음과 같이 간단히 말했다. "나에게는 노벨상이 장례식행 티켓이다. 지금까지 그 상을 받은 어느 누구도 아무 것도 할 수 없었다." - T.S 엘리엇, 영국 시인
‘4월은 잔인한 달’로 유명한 영국시인 T.S 엘리엇 이야기입니다. 우리는 외적보상이 주어졌을 때 쉽게 무너지는 사람들을 자주 보게 됩니다. 미하이 칙센트미하이에 의하면, 창의적인 사람들은 돈이나 명예가 아니라 단지 좋아서 일을 할 따름이라고 합니다. 이것이 바로 내적동기입니다. 내적동기가 충만한 활동에서 아이디어와 성과가 나올 가능성이 높다고 합니다.
가상환경(virtualenv)은 여러 개의 파이썬 프로젝트가 하나의 컴퓨터에서 충동을 일으키지 않고 존재할 수 있도록 해줍니다. virtualenv는 각 프로그램별로 완전히 독립적인 가상의 환경을 만들어서 각 프로그램별로 라이브러리 모듈등의 버전을 별도로 지정할 수 있게 합니다. 즉 한 컴퓨터에 여러 개발환경을 서로 독립적으로 설치, 실행할 수 있게 해줍니다.
왜 가상 환경을 만들어서 작업을 진행할까? 한마디로 요약하자면 "독립적인 작업환경에서 작업할 수 있다." 로 말할 수 있습니다.
프로젝트를 진행하다보면 여러 라이브러리, 패키지를 다운로드하여서 사용하게 됩니다. 그러다 보면 각 라이브러리들끼리 충돌을 일으키는 문제를 발생시키는 경우가 있습니다. 또는, 특정 버전과 호환하는 경우가 생겨서 최신 버전과 이전 버전 중 선택해야 하는 상황이 발생됩니다. 가상환경은 각 프로그램별로 라이브러리 모듈 등의 버전을 별도로 지정할 수 있게 합니다. 즉 한 컴퓨터에 여러 개발환경을 서로 독립적으로 설치, 실행할 수 있게 해줍니다.
본 교재의 모든 예제들은 다음과 같은 명령으로 만들어 실행하도록 합니다. 본인 스스로 가상 환경을 관리할 수 있다면 다른 이름을 사용해도 관계없습니다.
>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”) 를 입력하고 엔터를 누릅니다.
“Hello World”가 화면에 제대로 출력이 된다면 Ctrl+C 혹은 Ctrl+D 혹은 Ctrl+Z 를 눌러 빠져나오면 됩니다.
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’(앉을 수 없는 자리, 소문자)로 구성된다. 출력 각각의 테스트 케이스에 대해 그 교실에서 시험을 볼 수 있는 최대 학생의 수를 출력한다.
자신에게 딱 맞는 일을 하면 스스로 잘하고 있다는 느낌이 들 겁니다. 그 일로 벌어들이는 돈이 얼마가 되었든 여러분에게는 하루하루가 보너스일 거예요. 그러니 감히 말씀 드리겠습니다. 지름길을 찾지 마세요. 정말로 날아오르고 싶다면 여러분의 모든 능력을 열정에 투자하세요. 소명을 감사히 받으세요. 누구에게나 소명이 있습니다. 자신의 마음을 믿으세요. 그러면 성공은 찾아서 올 겁니다. - 오프라 윈프리
주인정신과 긍정정신으로 살아가는 사람의 삶은 언제나 축제의 장소이며, 일터는 내가 궁극적으로 되고 싶은 꿈을 이루는 터전이 됩니다. 직업은 어쩔 수 없이 할 수밖에 없는 직무도 아니고, 경제적 이익이나 무엇인가를 달성하기 위한 수단도 아닙니다. 일은 바로 소명으로서의 직업이 됩니다. 소명으로 자신의 일을 생각하는 사람은 언제나 일터로 소풍을 가는 것과 같습니다.
다시 한번 말하지만 실수는 누구나 하기 마련이다. 이때 중요한 건 실수에 어떻게 대처하느냐다. 만약 당신이 실수를 직접 바로잡고 싶으며, 다시는 같은 실수를 반복하지 않겠다는 의지를 보여준다면 상대방도 용서하기가 훨씬 수월해질 것이다.
- 제임스 리드의 《푸스틱 게임》 중에서 -
* 실수했음을 빨리 알아차리는 것도 능력입니다. 알아차렸을 때 가장 먼저 해야 할 것은 '인정'입니다. 인정해야 그다음 길이 보입니다. 실수의 근본 원인이 무엇이었는지, 그로 인해 행여라도 다른 사람에게 피해를 준 것은 없는지, 사과하거나 용서를 구할 일은 없는지 돌아보는 것이 좋습니다. 실수는 누구나 합니다.
생각은 쉴 새 없이 움직인다. 그것은 흐르는 물이나 공중의 대기처럼 혹은 바람에 흩날리는 풍선처럼 중심을 잡지 못하고 이리저리 움직인다. 생각의 특징은 자신이 의도하지 않은 생각, 즉 잡념이 등장한다는 점이다. 이 생각은 인간의 감정, 지성 그리고 '나'라는 이기적인 자아가 실제의 삶에서 만들어낸 복잡한 결과물이다.
- 배철현의《삼매》중에서 -
* 생각은 구름과 같습니다. 먹구름, 흰 구름이 쉴 새 없이 오갑니다. 이 구름은 '작은 나'. 곧 '에고'(Ego)와도 같습니다. 작은 나, 에고 구름이 가득할 때는 청정한 하늘은 보이지 않습니다. 그 구름이 걷혀야 하늘이 모습을 드러냅니다. 하늘은 언제나 거기에 있습니다. 그것이 '진아'(眞我), 곧 '참나', '큰 나'입니다. 그 '큰 나'가 '작은 나'를 연민으로 지켜보는 것이 명상입니다.