linux2019. 8. 22. 19:14

실행 파일 링크 걸기

$ sudo -s
# ln -s /home/named/pycharm-2019-2/bin/pycharm.sh /usr/bin


런처 메뉴에 아이콘 추가하기

# vi /usr/share/applications/pycharm.desktop
[Desktop Entry]
Version =x.y # 프로그램 버전 (생략 가능)
Name=Pycharm # 프로그램 이름
Comment=Pycharm IDE # 프로그램 설명
Exec=pycharm.sh # 프로그램을 실행할 명령어
Icon=/home/named/pycharm-2019-2/bin/pycharm.png # 프로그램의 아이콘 경로
Terminal=false # 프로그램 실행시 터미널 실행 여부. True : 실행, False: 실행안함
Type=Application # 실행 형식
Categories=IDE # 카테고리


파일에 권한 설정

# chmod 755 /usr/share/applications/pycharm.desktop



'linux' 카테고리의 다른 글

vi 명령어_test  (0) 2019.04.19
Posted by gawain
weekly learning2019. 8. 4. 23:47

# 첫째 줄에는 별 N개, 둘째 줄에는 별 N-1개, ..., N번째 줄에는 별 1개를 찍는 문제


# 정수 n을 입력 받는다.

# 2중 for문으로 외부 for문은 n만큼 반복, 내부 for문으로 n만큼 *을 출력한다.


def func(n):
    for i in reversed(range(n)):
        for _ in range(i+1):
            print('*', end='')
        print('')

if __name__ == "__main__":
    n = int(input())
    func(n)

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


# 첫째 줄에는 별 N개, 둘째 줄에는 별 N-1개, ..., N번째 줄에는 별 1개를 찍는 문제

# 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.


# 정수 n을 입력 받는다.

# 2중 for문으로 외부 for문은 n만큼 반복, 내부 for문으로 n만큼 *을 출력한다.


def func(n):
    for i in reversed(range(n)):
        string = ''
        for _ in range(i+1):
            string += '*'
        print(f'{string:>{n}}')

if __name__ == "__main__":
    n = int(input())
    func(n)

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


# 첫째 줄에는 별 1개, 둘째 줄에는 별 3개, ..., N번째 줄에는 별 2×N-1개를 찍는 문제

# 별은 가운데를 기준으로 대칭이어야 한다.


# 정수 n을 입력 받는다.

# 2중 for문을 사용. 외부 for문은 n만큼 반복(reversed)

# 내부 for문은 n만큼 공백을, 나머지는 *을 출력


def func(n):
    for i in reversed(range(n)):
        for _ in range(i):
            print(' ', end='')
        for _ in range(2*(n-i)-1):
            print('*', end='')
        print('')

if __name__ == "__main__":
    n = int(input())
    func(n)

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


# n을 입력 받는다.

# 먼저 위의 왼쪽 별 쌓기 부분을 만든다.

# 그 다음 위의 오른쪽 별 쌓기 부분을 만든다.

# 마지막으로 아래 부분을 만든다.


def func(n):
    for i in range(n):
        inner(n, i)
    for i in reversed(range(n-1)):
        inner(n, i)

def inner(n, i):
    for _ in range(i+1):
        print('*', end='')
    for _ in range(2*(n-i)-2):
        print(' ', end='')
    for _ in range(i+1):
        print('*', end='')
    print('')

if __name__ == "__main__":
    n = int(input())
    func(n)

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



이번 주 팀 프로젝트 업데이트 내용


• 지역 정보 API가 추가되었습니다.

= url : .../database/showregion/

= 이제부터 지역 정보를 서버에 저장하게 되었습니다.

= [서울, 경기, 부산/대구/경상] 3가지 지역을 서버에 저장합니다.

= 이 API는 서버에 저장된 지역 정보를 get으로 얻을 수 있습니다.


• '보고싶어' API가 추가되었습니다.

= url : .../database/checkwish/

= 사용자가 보고싶어를 클릭하면 사용자의 보고싶어 목록에 추가됩니다.

= 사용자가 보고싶어 상태가 아닌 영화의 보고싶어를 클릭하면 boolean 타입의 True 값을 반환합니다. 반대로 보고싶어를 취소하게 되면 False 값을 반환합니다.

= 이 API는 movie_id 라는 변수명(영화 id 값)을 POST 형식으로 서버에 전송해야 합니다.

= redoc 문서에 is_wished가 string으로 나오지만 실 데이터는 boolean 타입입니다. 이 부분은 추후에 수정하겠습니다.


• 영화 디테일 API가 추가되었습니다.

= url : .../database/movieDetail/?movie=

= movie에 영화의 아이디 값을 입력해야 합니다.

= ex) .../database/movieDetail/?movie=2


• 개인정보 수정 정보 출력 API가 추가되었습니다.

= url : .../accounts/showMyInfo/

= 마이페이지에서 수정하기 버튼을 눌러서 출력되는 get 정보들입니다.

= 이번에 새로 추가된 선호영화관의 경우 아래와 같은 형식으로 받아보실 수 있습니다. (id는 integer 타입입니다.)

[

{id:0, theater : string,  region: string},

{id:1, theater : string,  region: string},

{id:2, theater : string,  region: string}

]


• 개인정보 수정 API가 추가되었습니다.

= url : .../accounts/updateMyInfo/

= 마이페이지에서 수정하기 버튼을 누른 페이지에서 개인정보들을 수정하여 post로 서버에 보낼 수 있습니다.

= 개인정보는 핸드폰 번호, 비밀번호, 선호영화관을 수정할 수 있습니다.

= 이번에 추가된 선호영화관 또한 수정할 수 있습니다. 아래 create API 부분을 참조해 주세요.


• create API가 변경되었습니다.

= API 문서 이름 : UserCreateAPI -> userCreate

= 이제 선호영화관을 입력할 수 있습니다. 아래와 같은 형식, 변수명으로 보내시면 됩니다.

= 선호영화관 입력을 생략할 경우 아래 예시의 값으로 저장됩니다.

[

{id : 0, theater : '',  region: ''},

{id : 1, theater : '',  region: ''},

{id : 2, theater : '',  region: ''},

]


• UserCreateInPreferTheaterList API가 추가되었습니다.

= url : .../accounts/showCreate/

= 유저 생성시 옵션을 선택할 수 있는 선호영화관의 리스트를 get으로 얻을 수 있습니다.


• showPreferTheater API가 추가되었습니다.

= url : .../accounts/updatePreferTheater/

= 마이페이지 선호 영화관 등록/수정 버튼을 누르면 GET을 통해 선호 영화관을 출력 할 수 있습니다.


• preferTheater API가 추가되었습니다.

= url : .../accounts/modifyPreferTheater/{id}

= 마이페이지 선호 영화관 등록/수정 버튼을 누르면 POST를 통해 선호 영화관을 수정할 수 있습니다.

= {id}에 수정하려는 선호영화관 id 값을 넣으면 됩니다. id는 1순위는 0, 2순위는 1, 3순위는 2의 값을 가집니다.


• reservationScheduleList의 포스트맨 입력 방식이 변경되었습니다.

= 기존에는 영화 3개를 검색한다면 하나의 movie 키에 '알라딘_토이스토리4_라이온킹'과 같은 방식으로 검색했지만 업데이트 이후 부터는 하나의 movie 키에는 하나의 영화 값만 가질 수 있습니다. 영화를 2개 검색하고 싶다면 movie의 키를 두 개 생성 후 각각 검색을 원하는 영화 제목을 값으로 입력하시면 됩니다. (theater 또한 동일합니다.)


• 업데이트 후 데이터베이스 데이터 변동사항

= 2019-08-03 ~ 2019-08-07 까지의 영화 예매 가능 데이터를 가집니다.

= 상영 예정 영화 4개가 추가되었습니다(총 11개 영화). : 47미터 2, 동키 킹, 유열의 음악앨범, 인비저블 위트니스

= 모든 좌석은 기본적으로 예약되어 있지 않은 상태입니다.

= 테스트 아이디는 그대로 남아있습니다.


• reservationSecond의 API 주소가 변경되었습니다.

= url : .../database/reservationSecond/


• 현재 API 문서에 선호영화관(preferTheater)의 타입이 string으로 나오는 문제가 있습니다만 실 데이터는 배열 안의 JSON 형식의 타입이니 참고해주세요.



서버에 적용 하면서 변경한 점

• reservationScheduleListView()

= 영화, 지점을 배열로 받을 수 있게 수정

= 영화, 지점을 배열에 맞게 필터할 수 있도록 수정

= 영화, 지점 검색이 각 3개 초과하지 않도록 하는 것을 배열에 맞게 수정

= 스케줄에 좌석이 하나도 예매 안되었을 때 seat_number가 출력이 되지 않도록 수정


• check_wishmovies_view()

= POST method로 수정

= redoc 문서에 추가


• show_region_view()

= redoc 문서에 추가


• reservationSecondView()

= 예약되어 있는 좌석(booked_seat_numbers)이 없는 경우와 있는 경우를 if문으로 분기하는 구문 추가


• create_objects_seat()

= 디비 데이터 생성 스크립트에 좌석 넘버 자동 생성에 주석 처리


• Seat(models.Model)

= save() 빈 리스트 저장시 seat_count가 1로 카운트 되는 문제 수정


• 영화 디테일

= description 추가

= create_objects_movie_movie_detail() description 필드 입력 추가


이번 주에 대대적으로 추가된 내용이 있어서 밤도 좀 새고 했더니 좀 바빴다.


하면서 안되는 부분이 굉장히 많았고, 어려운 부분도 많았지만 결국 돌아가는데 


Posted by gawain
weekly learning2019. 7. 28. 20:01

ADT(Abstract Data Type)


간단하게 구체적인 기능의 완성과정을 언금하지 않고, 순수하게 기능이 무엇인지를 나열하는 것을 가리켜 추상 자료형 또는 간단히 ADT라 한다.


queueFIFO(First In, First Out)



queue ADT

1. Q.empty() -> Boolean : 큐가 비어있으면 True, 아니면 False

2. Q.enqueue(data) -> None : 큐의 맨 뒤에 데이터를 쌓는다.

3. Q.dequeue() -> data : 큐 맨 앞의 데이터를 삭제하면서 반환

4. Q.peek() -> data : 큐 맨 앞 데이터를 반환


stack LIFO



stack ADT

1. S.empty() -> Boolean : 스택이 비어있으면 True, 아니면 False

2. S.push(data) -> None : 스택의 맨 위에 데이터를 쌓는다

3. S.pop() -> data : 스택 맨 위의 데이터를 삭제하면서 반환

4. S.peek() -> data : 스택 맨 위 데이터를 반환


Single linked list ADT

1. S.empty() -> Boolean : 리스트가 비었다면 True, 아니면 False

2. S.size() -> integer : 리스트에 있는 요소 개수

3. S.add() -> None : 노드를 리스트의 맨 앞에 추가

4. S.search(target) -> node : 리스트에서 target을 찾는다, 찾으면 노드를, 못 찾으면 None 반환

5. S.delete() -> None : 맨 앞 노드를 삭제


Double linked list ADT

1. S.empty() -> Boolean : 리스트가 비었다면 True, 아니면 False

2. S.size() -> integer : 리스트에 있는 요소 개수

3. Insert 계열

3-1. S.add_first(data) -> None : 리스트의 맨 앞에 데이터 추가

3-2. S.add_last(data) -> None : 리스트의 맨 뒤에 데이터 추가

3-3. S.insert_after(data, node) -> Node : node 다음에 데이터 추가

3-4. S.insert_before(data, node) -> None : node 이전에 데이터 추가

4. Search 계열

4-1. S.search_forward(target) -> node : 리스트의 맨 앞 데이터부터 검색

4-2. S.search_backward(target) -> node : 리스트의 맨 뒤 데이터부터 검색

5. Delete 계열

5-1. S.delete_first() -> None : 리스트의 첫 데이터 삭제

5-2. S.delete_last() -> None : 리스트의 마지막 데이터 삭제

5-3. S.delete_node(node) -> None : 노드를 삭제



problem solving

출처 : https://www.acmicpc.net/problem/1000


def func(a, b):
    print(a+b)

if __name__ == "__main__":
    a, b = input().split()

    func(int(a), int(b))


출처 : https://www.acmicpc.net/problem/1924


# 첫째 줄에 빈 칸을 사이에 두고 x(1≤x≤12)와 y(1≤y≤31)이 주어진다. 

# 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.

# 2007년 1월 1, 8일은 mon

# 0 일 / 1 월 / 2 화 / 3 수 / 4 목 / 5 금/ 6 토

# 8 월 / 9 화 / 10 수 / 11 목 / 12 금 / 13 토 / 14 일


# m은 1~12, d는 1~31 값을 입력 받는다.

# if문으로 마지막 날을 예외처리 한다.

# 1월 1일은 1, 2월 1일은 32, ...

# 요일과 달력의 값을 딕셔너리로 매핑한다.

# m과 d를 더한 값에 7로 나눈 나머지 값이 요일이 된다.


def func(m, d):
    month = {"1":0, "2":31, "3":59, "4":90, "5":120, "6":151, "7":181, "8":212, "9":243, "10":273, "11":304, "12":334}
    day_of_the_week = {0:"SUN", 1:"MON", 2:"TUE", 3:"WED", 4:"THU", 5:"FRI", 6:"SAT"}
    num = (month[m] + int(d)) % 7
    print(day_of_the_week[num])

if __name__ == "__main__":
    m, d = input().split()
    func(m, d)


출처 : https://www.acmicpc.net/problem/2438


# 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제


# 정수 n을 입력 받는다.

# 2중 for문으로 외부 for문은 n만큼 반복, 내부 for문으로 n만큼 *을 출력한다.


def func(n):
    for i in range(n):
        for _ in range(i+1):
            print('*', end='')
        print('')

if __name__ == "__main__":
    n = int(input())
    func(n)


출처 : https://www.acmicpc.net/problem/2439


# 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

# 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.


# 정수 n을 입력 받는다.

# 2중 for문으로 외부 for문은 n만큼 반복, 내부 for문으로 n만큼 *을 출력한다.


def func(n):
    for i in range(n):
        string = ''
        for _ in range(i+1):
            string += '*'
        print(f'{string:>{n}}')

if __name__ == "__main__":
    n = int(input())
    func(n)


최근 팀 프로젝트에 힘을 쏟다보니 공부할 시간이 많지 않다.


기능 구현 하고, 서버에 올리고, 유지보수 하고..


서버에 올릴 때는 제발 문제가 안 터지길 기도 하면서 올리고 있다. ㅜㅜ


하지만 항상 바람은 이루어지지 않고 있다..


최근에는 아래 부분의 기능을 구현하고 있는데,


생각보다 마이페이지 부분 구현이 로그인 토큰과 관련되서 그런지 고려해야 할 사항들이 많은 것 같다.


빨리 mvp에서 선정한 부분들 마무리 하고 결제 구현을 시작 해야 하는데 ㅜㅜ





Posted by gawain