일단 이 일을 하려면 이 조건을 충족하는 게 좋다. 

 

나는 3대 500 친다

 

이거 충족 안한다고 금지! 이런건 아닌데 후폭풍 씨게 온다. 


1. 통근버스가 있어서 정해진 시간에 거기 가서 대기타고 있다가 그거 타고 가면 땡임. 근데 중간에 휴게소를 안 들르고 정류장에 정차만 했다가 바로 센터로 가기때문에 먼 데 당첨되면 최대한 오줌보를 비우고 타는 게 좋음. 이건 퇴근할때도 마찬가지임. 

2. 출근체크를 앱으로 하는데 거기서 월급 받을 통장 정보도 다 등록함. 

3. 인터넷이 안터지기때문에 핸드폰이 의미가 없고, 일할 때 가져가지도 못함. 그래서 지금이 몇 시인지도 모름. 점심먹고 유튜브 봐야지~ 점심먹고 부스트코스 봐야지~ 다 부질없음. 어차피 안터짐. 

4. 안전화를 주긴 주는데 건조기 열어보니까 왼쪽만 한 짝씩 두 개 있는거 있더라... 그리고 1인 1안전화가 아니라 공용임. 

5. 사물함은 있는데 자물쇠가 셀프임. 안그러면 누가 물건 쌔벼갈 수도 있음. 

6. 보통은 라인이 두개인데 나는 세개짜리 배정받았음. 여기가 근데 각 잡고 한 개만 할 수가 없는게 하나 하다보면 다른데가 꽉 차서 거기를 해결해야 함. 교통체증 생기면 컨베이어벨트때문에 박스가 낑김. 

7. 생각보다 무거운 짐이 많음. 쌀(10kg~), 세제(액체세제류), 섬유유연제, 강아지/고양이 사료(그래도 좀 가벼운 축), 음료(벌크), 가구(이거는 상품에 따라 좀 가벼운 것도 있음), 고양이 모래(무거움), 배변패드(정말 생각보다 무거움)... 유독 내 라인에만 무거운 짐이 많이 오는것도 있는데 안정적으로 얼추 쌓은다음 보내려고 해도 계속 무거운 짐만 와서 일단 안정적으로 쌓는 게 안되고 가슴 위로 들어올리는 게 불가능함. 이래서 가급적 3대 500 치는 사람이 가는 게 좋음. 

8. 구내식당이 한식/라면/스낵바 이렇게 있는데 일단 밥이 핵노맛이었음. 고등어 튀김인데 카레를 묻힌 것 같은데 카레 향만 나고, 크기도 작고, 심지어 대가리가 붙어있었음. 집에서 튀긴거는 대가리도 없고 몸통/꼬리가 분리되어 있어서 차라리 라면 끓일 걸 그랬나... 했음. 근데 라면도 신라면... 

9. 자판기가 있음. 과자는 모르겠고 일단 음료는 쌈. 포카리 한캔에 300원. 

10. 드나들 때 금속탐지기를 통과해야 하는데... 나올 때 벨트도 풀어서 바구니에 넣어야 함. 안그러면 탐지기가 울려서 붙잡힘. 

11. 작업할 때 목장갑을 줌. 물론 이걸 껴야 일하기가 수월함. 

12. 일하다보면 옷이 자연스럽게 더러워지기때문에 흰 옷은 비추. 

13. 샌들/크록스 등 맨발로도 신을 수 있는 신발이 금지인데 그럴수밖에 없음. 일하기 전에 안전화를 신어야 하거든. 맨발에 운동화 신으면 발냄새 장난없음. 

14. 9-6인데 오전에는 바로 업무를 하는 게 아니라 안전교육을 받고 일을 한다. (1시간 좀 넘게 걸림) 

15. 오후 업무를 하다가 4시부터 15분 휴식하고 업무 재개. 점심시간/휴식시간에는 업무 중단하고 밥먹거나 쉬어야 한다. 퇴근은 시간 다 되면 그냥 퇴근하면 된다. 

16. 현재 팔(상완/하완), 어깨, 다리(무릎 아래), 엉덩이(...), 허리가 매우 쑤셔서 뭘 할 수가 없음. 줄넘기는 어찌어찌 하긴 했는데, 이게 못 움직이거나 그런건 아닌데 움직이면 아프다. 앉고 걷고 서고 하는 모든 과정에서 통증이 동반된다. 

그... 다들 아시겠지만. 포켓몬스터 신작이 11월 18일에 발매고, 9월 30일부터 예약구매가 시작되었다. 그리고 그거랑 별개로 시작된 이벤트가 하나 더 있다. 바로... 

 

이로치 무한다이노 배포. (두둥)

 

물론 예약구매도 했지... 아무튼 썰 풀어봄. 


1. 이마트는 무한다이노 배포를 안하는 것 같아서 롯데마트를 찾아봤는데 제일 가까운게 강변이다. 그래서 갔는데 토이저러스(롯데마트는 여기서 받더라...)가 없는거야... 고객센터 가서 물어봤는데 여기서는 예약을 안 받는대요. 그래서 가까운 잠실로 갔음. 

2. 잠실은 롯데마트가 두개인데 8호선쪽에 있는 롯데마트를 갔음. 갔는데 거기는 토이저러스는 있는데 토이저러스 테이블은 없고 고객센터 가니까 여기가 아니래... 맞은편이래... (말이 맞은편이지 멀다) 근데 많이 물어보러 온 모양인지 거기 안내해주시는 분도 뭔지는 알더라. 

3. 두번째로 간데는 지점 이름이 특이했음. 아무튼 거기는 무한다이노 배포를 하는데 일단 오늘은 아님(날짜상으로는 오늘이 맞는데 포스터가 아직 안옴). 대신 예약구매는 바이올렛 재고가 남아있어서 오케이 콜 했음. 그러니까 다음달에 글이 안 올라오면 엄마가 조졌구나 생각하시면 됩니다 그 옆에 롯데하이마트도 포스터가 안 들어와서 배포 못했음. 

4. 그러던 와중 어떤 분이 용산 대원샵을 간다는겨. 그래서 갈까 말까 고민하다가 일단 석촌호수 레이드 한판 때리고 면접까지 시간도 있는데 함 가보자 해서 갔음. 

5. 도착했는데 점원 왈. 

무한다이노 받으러 오셨죠?

 

어떻게 알았냐니까 그거 받으러 온 분 많다고... 

그래서 티켓을 받았다. (코드는 뒷면에 있음)

 

그게 이거다. 이번에 이로치 처음 풀리는거라 많이들 찾았음.. 

문제

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

 

1620번: 나는야 포켓몬 마스터 이다솜

첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면

www.acmicpc.net

포켓몬 전국도감 번호->이름/이름->전국도감 번호 말하기. (입력 순서가 일단 전국도감 아니면 관동 도감같은데...)

 

Reference

https://seraup.dev/10

 

백준 1620번 나는야 포켓몬 마스터 이다솜 (Python)

문제 포켓몬의 수 N, 내가 맞춰야하는 문제의 수 M. N개의 줄에 포켓몬의 이름이 입력으로 들어옴. 그 다음 줄부터 M개의 줄에 맞춰야하는 문제가 입력으로 들어옴. 숫자로 들어오면 포켓몬 번호

seraup.dev

https://blockdmask.tistory.com/556

 

[python] 파이썬 isdigit 숫자 판별

안녕하세요. BlockDMask 입니다. 오늘은 파이썬에서 문자열이 숫자로 이루어졌는지 확인하는 isdigit 에 대해서 이야기해보려합니다. 파이썬 isdigit 설명 1-1) isdigit 설명 isdigit은 string 클래스에 있는

blockdmask.tistory.com

 

풀이

해시는 나도 뭔지 잘 모르는데 아무튼 빠르다고 한다. 그보다 일단 18년차 포덕으로서... 몇가지 정정하고 가도록 합시다... 문제적 허용으로 봐주세요 여러분.

 

1. 문제에 나온 도감 번호는 관동 도감으로 추정된다. (오박사가 아직 전국도감 안준듯)

2. 보통 리그에서 챔피언 뚝배기 깨면 전국도감으로 업그레이드는 걍 해준다. FRLG는 도감에 일정 마리수 이상 등록도 해야 하는데 BDSP는 걍 챔피언 깨니까 업글해줌. (물론 채우면 보상이 있다)

3. 7세대부터 인게임에서는 전국도감이 없어졌다. (BDSP의 경우 전국도감이 생기긴 했는데 5세대 이후로는 못 와서 의미가 없음) 7세대까지는 포켓몬 뱅크, 8세대부터는 포켓몬 홈에서 전국도감을 확인할 수 있다.

4. 스타팅으로 받자마자 솔라빔 쓰는 이상해씨는 없습니다... 보통 이런 고위력기 자력기로 배우려면 5~60 넘겨야 한다. 피카츄도 번개까지 배우고 라이츄 만들려면 63인가까지 키워야 한다. 피카츄가 물몸이라 사리 많이 적립된다 10만볼트 자력기로 가르치려면 라이츄 만들고 살리거나 피카츄 50대까지 쌩으로 키워야 한다. 아님 기술머신 쓰거나... 

5. 오바람(라이벌)이 스타팅으로 이브이를 가져가는 건 피카츄 버전입니다. 그리고 피카츄 버전은 저 그래픽으로 나온 게 없음. 최근 리메이크 되긴 했는데 그게 스위치 버전으로 렛츠고 피카브이 나온거라 3D 그래픽임. 그거랑은 별개로 스토리에서 이 고증은 어쨌든 잘 살린 게 맞음.

6. 전국도감이 지금 905마린가 906마린가 그래서 절대 문제에 뒷번호까지 못 나온다. (러브로스가 905번인가 그럼) 그리고 나도 다 못 외운다.

7. 다솜씨 그거 홈에서 모으면 500년 전 마기아나 줍니다. (일단 환상의 포켓몬 중 멜탄/멜메탈도 채워야 함) 다솜씨 포고 시작하겠네 

8. 1세대(+리메이크)는 주인공이 풀밭으로 나가려고 하면 어머 얘 밖은 위험하니 이걸 데려가렴 하면서 스타팅을 줍니다. (퀴즈 ㄴㄴ 밖은 위험하니 ㅇㅇ)

9. 본가는 스토리 라인상 스토리 초반에 리그장에 갈 일이 없다. 악의 조직 뚝배기 깨고 체육관 뚝배기 깨느라 바쁘다.

 

더 쓸 거 많은데 일단 문제 풀이도 해야 하니 여기까지 합시다. 

 

사실 나도 해시 테이블이 뭔지는 잘 모르는데 뭔가 되게 빨리 찾을 수 있는 모양이더라... 아, 이 문제에서 그래서 해시 테이블을 만드냐면 그건 아니고 딕셔너리로 풀 거다.

 

import sys

N, M = map(int, sys.stdin.readline().split())
pokemon_name = []
pokemon_dic = {}

N은 포켓몬 도감 딕셔너리(...) 그니까 관동도감 상위 n마리를 뜻하고, M은 거기서 문제가 몇 개냐를 얘기한다. 즉 N이 28이면 이상해씨~모래두지까지라는 얘기다. 뮤츠는요 150 치면 되지 않을까 이쯤되면 전국도감 크롤링 하는 게 빠를듯 

 

for i in range(N):
    pokemon = sys.stdin.readline().strip()
    pokemon_name.append(pokemon)
    pokemon_dic[pokemon] = i + 1

짜잔. 그래서 리스트와 딕셔너리가 나오는데요... 응? 그럼 리스트는 그저 딕셔너리의 중간과정에 불과한건가요? 놉, 그건 이따 설명해드림.

 

for _ in range(M):
    pokemon_find = sys.stdin.readline().strip()
    if pokemon_find.isdigit():
        print(pokemon_name[int(pokemon_find) - 1])
    else: 
        print(pokemon_dic[pokemon_find])

문제가 두 가지 케이스인데 포켓몬 이름을 말하면 도감번호를, 도감번호를 말하면 포켓몬 이름을 찾아야 한다. 포켓몬 이름을 말하면 도감번호를 반환하는 건 포켓몬 이름을 키로 검색해서 딕셔너리 밸류 뽑으면 되는데... 그럼 도감 번호는??? 헐 이거 밸류로 찾을 수 있어요? 아니 그래서 리스트가 필요한거임.

 

isdigit()는 입력값이 숫자인지를 확인해주는거기 때문에 알파벳이건 한글이건 빵상빵상이건 외계어건 마인크래프트어건 안농핫삼이건 문자열이 있으면 false다. 매우 순수하게 숫자만 있어야 True기 때문에 isdigit()이 true라는 건 숫자만 있다, 즉 도감 번호라는 얘기니까 정수형으로 변환한 다음 거기에 1을 빼서 인덱싱하면 된다. 참 쉽죠? 

'BOJ > [BOJ] Python' 카테고리의 다른 글

백준 10807번 풀이  (0) 2022.11.13
백준 10815번 풀이  (0) 2022.10.12
백준 18870번 풀이  (0) 2022.09.30
백준 10814번 풀이  (0) 2022.09.29
백준 1181번 풀이  (0) 2022.09.29

문제

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

 

18870번: 좌표 압축

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌

www.acmicpc.net

입력받은 수직선상의 좌표를 압축한 값을 출력하시오(라는데 이해가 안된다...)

 

Reference

https://eunhee-programming.tistory.com/116

 

코딩테스트 준비 - 백준18870번 좌표압축 풀이:파이썬 딕셔너리 활용 (파이썬)

백준 18870번 풀이 문제풀러가기 https://www.acmicpc.net/problem/18870 Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌" data-og-host="www.acmicpc.net" data-og-source-url="https..

eunhee-programming.tistory.com

https://only-wanna.tistory.com/entry/%EB%B0%B1%EC%A4%80-18870%EB%B2%88-%EC%A2%8C%ED%91%9C-%EC%95%95%EC%B6%95

 

[파이썬] 백준 18870번 좌표 압축

Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌" data-og-host="www.acmicpc.net" data-og-source-url="https://www.acmicpc.net/problem/18870" data-og-url="https://www.acmicpc.ne..

only-wanna.tistory.com

 

풀이

뇌에서 블루스크린이 오긴 했는데... 아무튼... 이게 그래서 뭐 하는 문제냐면요... 엑셀의 rank()함수같은거다... 좌표를 오름차순으로 정렬한 다음 크기가 작은 순서대로 0, 1, 2, 3 이런 식으로 하면 된다. 아무튼 그럼.

 

import sys

N = int(sys.stdin.readline())
num_list = list(map(int, sys.stdin.readline().split()))
num_list2 = []

일단 나중에 출력하려면 원래 배열을 남겨둬야 한다. 무슨 말인지는 이따 설명해드림. 아무튼 그래서 num_list는 입력받은 리스트고, num_list2는 입력받은 리스트에서 중복값을 쳐내고 오름차순으로 정렬할거다.

 

num_list2 = set(num_list)
num_list2 = sorted(list(num_list2))

그러면 중복값을 쳐내고 정렬하고

 

rank_dic = {num_list2[i]:i for i in range(len(num_list2))}

일단 이거는 리스트 콤프리헨션인데... 중복값을 쳐내고 정렬한다고 했는데, 그러면 예시에 있는 1000 999 1000 999 1000 999의 경우 최종적으로 999, 1000이 된다. 그러면 이 리스트의 0번은 999니까 999(키)-0(밸류)쌍 하나, 1000(키)-1(밸류)쌍 하나 이렇게 나오게 된다. 어? 딕셔너리? 그럼 원 리스트를 남겨둔 건 그것때문이었나요??? 네, 그렇습니다.

 

for i in num_list:
    print(rank_dic[i],end=" ")

딕셔너리는 키로 픽하면 밸류가 나오는 구조이기때문에, 원래 리스트의 요소들을 위에서 만든 딕셔너리로 검색해 밸류를 뽑아내면 된다. 1000 999 1000 999 1000 999면 1000을 키로 픽하고, 999를 픽하고, 이런 식으로 반복하게 된다.

 

import sys

N = int(sys.stdin.readline())
num_list = list(map(int, sys.stdin.readline().split()))
num_list2 = []
num_list2 = set(num_list)
num_list2 = sorted(list(num_list2))

rank_dic = {num_list2[i]:i for i in range(len(num_list2))}

for i in num_list:
    print(rank_dic[i],end=" ")

아무튼 그렇다. 뇌정지 어유...

'BOJ > [BOJ] Python' 카테고리의 다른 글

백준 10815번 풀이  (0) 2022.10.12
백준 1620번 풀이  (0) 2022.09.30
백준 10814번 풀이  (0) 2022.09.29
백준 1181번 풀이  (0) 2022.09.29
백준 11650, 11651번 풀이  (0) 2022.09.19

문제

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

 

10814번: 나이순 정렬

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을

www.acmicpc.net

회원 정보를 나이순으로 정렬하되, 이름 순서는 바뀌지 않도록 하시오.

Reference

https://velog.io/@good159897/%EC%95%88%EC%A0%95-%EC%A0%95%EB%A0%AC-VS-%EB%B6%88%EC%95%88%EC%A0%95-%EC%A0%95%EB%A0%AC-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%9D%B8%ED%84%B0%EB%B7%B0

 

안정 정렬 VS 불안정 정렬 - [파이썬 알고리즘 인터뷰]

안정 정렬(Stable Sort)란 중복된 값을 입력 순서와 동일하게 정렬합니다.

velog.io

https://blog.naver.com/raylee00/222070980588

 

안정 정렬과 불안정 정렬(Stable sort, Unstable sort)

안정? 불안정? 우리가 프로그래밍을 할 때, 어떤 집합안에 들어있는 원소들을 정렬해야 할 때가 있다. 정렬...

blog.naver.com

https://velog.io/@mquat/python-%EA%B8%B0%EC%B4%88-%EB%B0%B1%EC%A4%80-10814%EC%95%88%EC%A0%95%EC%A0%95%EB%A0%AC%EA%B3%BC-%EB%B6%88%EC%95%88%EC%A0%95%EC%A0%95%EB%A0%AC

 

[python 기초] 백준: 10814번 / 안정정렬과 불안정정렬

 

velog.io

 

풀이

안정 정렬?? 뭔 생전 듣도보도 못 한 정렬이죠? 제가 모르는 알고리즘이 더 있는건가요? 아 그건 아니다. 일단 이거는 배열이 하나일 때를 예시로 들면 애매하니까 두 개의 요소를 갖는 어레이(...)를 예로 들어보자. 예를 들어서 트럼프 카드의 문양과 숫자를 값으로 갖는 배열을 입력했을 때

 

[[스페이드, 2],[하트, 5],[스페이드, 7],[다이아, 5]]

 

이런 배열이 있다 치자. 그리고 카드 숫자를 기준으로 정렬할 때 안정 정렬은

 

[[스페이드,2],[하트,5],[다이아,5],[스페이드,7]]

 

이런 식으로 숫자가 같은 카드의 문양 순서가 변하지 않지만 불안정 정렬의 경우 숫자가 같은 5의 문양 순서가 다이아-하트로 바뀔 수도 있다.

 

import sys

N = int(sys.stdin.readline())
user_list = []

for i in range(N):
    age, name = sys.stdin.readline().split()
    user = (int(age), name)
    user_list.append(user)

배열에 담는 건 맞는데, 나이와 이름을 튜플에 담을거다. 딕셔너리는 키값이 같으면 밸류가 달라도 먼저 들어온 값을 버리기때문에 안된다. 리스트랑 세트는... 안되나? 아무튼...

 

user_list.sort(key=lambda x:x[0])

그 다음은 익명함수 김람다씨 불러야지 뭐. .sort가 안정 정렬을 하기 때문에 이렇게만 하면 된다. 근데 뽑을 때 문제가 하나 있는데... 앞의 문제처럼 for문 줘도 된다. 줘도 되는데 print(i) 하면 튜플이 고대로 나와버린다. 그러면 어떻게 된다? 네 틀립니다.

 

for i in user_list:
    print(i[0],i[1])

그래서 튜플 인덱싱을 해야 한다.

 

import sys

N = int(sys.stdin.readline())
user_list = []

for i in range(N):
    age, name = sys.stdin.readline().split()
    user = (int(age), name)
    user_list.append(user)

user_list.sort(key=lambda x:x[0])

for i in user_list:
    print(i[0],i[1])

그래서 이게 전체 코드다. 

'BOJ > [BOJ] Python' 카테고리의 다른 글

백준 1620번 풀이  (0) 2022.09.30
백준 18870번 풀이  (0) 2022.09.30
백준 1181번 풀이  (0) 2022.09.29
백준 11650, 11651번 풀이  (0) 2022.09.19
백준 25501번 풀이  (0) 2022.09.13

문제

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

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

주어진 영단어를 주어진 순서대로 정렬하는 문제

 

풀이

자 일단 이 문제를 풀기 위해서는 총 두가지를 해야 한다. 중복되는 단어를 없앤 다음 주어진 순서대로 정렬하는 것. 리스트 출력은 별개로 둡시다...

 

엥? 중복 단어요? 그걸 어떻게 가려내죠? 사람이 일일이 인덱싱 해야 하나요? 에이 그런 노가다 안해도 됨. 파이썬에는 세트(set)라는 매우 좋은 형태가 있다. 세트는 안에 든 것이 중복되면 하나 빼고 다 날려버리기때문에 입력 받은걸 리스트로 저장하고, 그 리스트를 세트로 만든 다음 다시 리스트로 만들면 중복되는 단어들은 깔끔하게 해결된다.

 

import sys

N = int(sys.stdin.readline())
word_list = []

for i in range(N):
    word = sys.stdin.readline().strip()
    word_list.append(word)

word_list = set(word_list)
word_list = list(word_list)
# set으로 중복 날려버리기 신공

그래서 이렇게만 해주면 중복되는 단어들은 아웃! 이제 남은 것은 중복된 단어가 없어진 리스트에서 단어들을 정렬하는 일이다.

 

일단 문제에서 주어진 정렬 기준을 보자. 첫번째로 단어의 길이, 두번째로 ABC순으로 정렬되는데 이게 무슨 소리냐면 i는 한글자고 apple은 다섯글자니까 i가 apple보다 위에 온다는 얘기다. bead와 bean은 둘 다 네글자이므로 bead, bean 순으로 오게 된다. 아니 그럼 이걸 언제 짜죠? 아니 뭘 또 짜요 김람다씨 불러.

 

word_list.sort(key=lambda x:(len(x),x))
# 솔직히 김람다씨 될 줄 몰랐죠...

일단 저기서 순서는 둘째치고... 엥? 괄호로 묶었어요? 람다식으로 정렬할 기준이 여러개면 튜플로 묶으면 된다. 즉, key=lambda x:(len(x),x)에서 (len(x), x)가 정렬 기준 순서. 저렇게 하면 일차적으로 단어의 길이순으로 정렬한 다음 다시 사전 순서대로 정렬하게 된다.

 

import sys

N = int(sys.stdin.readline())
word_list = []

for i in range(N):
    word = sys.stdin.readline().strip()
    word_list.append(word)

word_list = set(word_list)
word_list = list(word_list)
# set으로 중복 날려버리기 신공

word_list.sort(key=lambda x:(len(x),x))
# 솔직히 김람다씨 될 줄 몰랐죠... 

for i in word_list:
    print(i)

근데 나도 이게 한번에 될 줄 몰랐음. 

'BOJ > [BOJ] Python' 카테고리의 다른 글

백준 18870번 풀이  (0) 2022.09.30
백준 10814번 풀이  (0) 2022.09.29
백준 11650, 11651번 풀이  (0) 2022.09.19
백준 25501번 풀이  (0) 2022.09.13
백준 1427번 풀이  (0) 2022.08.23

아니 한다는 얘기는 들었는데 진짜로 연장했음??? 

그리고 논현에서 양재까지 가는데 추가요금을 받아요??? 

예전에는 도단위로 바껴야 받지 않았음???? 

나도 막 그렇게 디테일하게 아는 건 아닌데 이걸 대체 어떻게 아냐면 수능에 저게 나왔었음... ㅋㅋㅋㅋㅋㅋ 놀랍게도 실화입니다. 그래서 직탐 등급 잘 받으려면 첫번째로 엑셀(if랑 룩업계열), 두번째로 HTML(...), 세번째로 베이직(VB 맞음), 네번째로 이걸 잘 해야 함... 베이직은 뭐 수능시험장에서 코테 치는 것도 아니고 코드랑 초기 변수 주고 이거 다 돌면 뭐됨? 이런 식으로 나왔습니다.


불 대수

왜 그... 프로그래밍 언어를 공부하다보면 자료형이 나온다. 인트 플로트 문자열(스트링) 그리고 꼭 개근하는 자료형이 바로 Boolean인데... 왜 그거 있잖음. True AND False = False. 이 T/F를 지지고 볶는게 논리 연산이라고 보면 된다. 그래서 논리게이트의 진리표 자체는 불 대수에도 있다.

 

매우 당연하게도 만든 사람 이름이 불이다. ???: 어떻게 사람 이름이 불 ㅋㅋㅋㅋㅋ ??: 어떻게 사람 이름이 남쪽 ㅋㅋㅋㅋㅋㅋ 

 

진리표

AND, OR, NOT, XOR만 외우면 나머지 세개는 NOT이랑 조합하는거라 쉽다. 수능 성적 걸리면 어떻게든 외우게 된다 

 

AND(A ∧ B)

A B 출력
0 0 0
0 1 0
1 0 0
1 1 1

입력으로 들어온 두 개가 전부 참이어야 참을 출력한다. 즉, AND에서 False가 뜬다는 건 적어도 하나는 거짓이라는 얘기이기도 하다.

 

OR(A ∨ B)

A B 출력
0 0 0
0 1 1
1 0 1
1 1 1

둘 중 하나라도 참이면 True를 출력한다.

 

NOT(¬, !A)

A 출력
0 1
1 0

입력과 반대되는 출력을 내놓는다. 입력이 False면 True, True면 False. 기호는 왼쪽에 있는 꺾쇠 기호가 맞는데, 프로그래밍 언어에서는 보통 !를 붙여서 쓴다. 만약 if문에 !=가 있다면 'NOT equal'이라고 보면 된다. (실제로도 같지 않다는 얘기)

 

NAND(A ⊼ B)

A B 출력
0 0 1
0 1 1
1 0 1
1 1 0

얘는 AND+NOT. 

 

NOR(A ⊽ B)

A B 출력
0 0 1
0 1 0
1 0 0
1 1 0

OR+NOT.

 

XOR(A ⊻ B)

A B 출력
0 0 0
0 1 1
1 0 1
1 1 0

배타적 논리합이라서 두 입력의 값이 달라야 True를 출력한다. 보통 지수승을 표기할 때 n^m 이런 형식으로 쓰는데 파이썬이나 자바스크립트에서는 XOR 기호이기 때문에 지수승은 **로 써주자.

 

XNOR(EQV, A ≡ B)

A B 출력
0 0 1
0 1 0
1 0 0
1 1 1

XOR+NOT이라고 생각하면 쉽다. 모든 입력의 값이 같아야 True를 반환한다.

 

논리게이트

논리게이트는 불 대수를 물리적인 장치에 구현한 것이다. 불 대수(물리) 그래서 기호가...? 표시 방식은 세 가지가 있는데 저건 ANSI 방식. 아니 ㄹㅇ 이걸로 외웠음.

 

논리게이트가 들어가는 것 중에 가산기 듀오가 있다. 반가산기와 전가산기인데... 어? 반...? 1/2? 그러면 반가산기 두개 합치면 전가산기 되나요? 아뇨 OR게이트 추가해야됩니다.

 

 

'Coding > 코딩잡담' 카테고리의 다른 글

SI 접두어와 컴퓨터 용량  (0) 2022.10.10
SMILES  (0) 2022.10.06
chmod가 뭐지?  (0) 2022.09.23
스택과 큐  (0) 2022.09.19
이진 탐색 알고리즘  (0) 2022.09.08

Reference

https://recipes4dev.tistory.com/175

 

리눅스 chmod 명령어 사용법. (Linux chmod command) - 리눅스 파일 권한 변경.

1. 리눅스 파일 사용 권한 리눅스에서, 파일(File)을 사용해 할 수 있는 작업은 크게 세 가지로 나눌 수 있습니다. 파일에 저장된 데이터를 읽기. (r = read). 파일에 데이터를 쓰기. (w = write). 파일 실

recipes4dev.tistory.com


자, 이게 뭐냐... 를 설명하기 전에 한가지 예시를 들어보자. 우리 전전전직장은 사규나 서류 양식, 실험 보고서 등을 각 폴더에 보관해두고 거기에 사원들이 접근할 수 있게 권한을 줬다. 부서가 좀 많이 있는데 내가 소속한 부서는 연구개발팀부였고 QC쪽도 같이 있었다. 그 외에도 학술영업 하는 부서, 경영지원 하는 부서, 생산쪽 부서... 이렇게 부서가 많다.

 

아무튼 이럴 경우 회사 입장에서 파일이나 폴더에 접근 권한을 설정할 수 있는데, 연차 신청서같이 회사원들이 공통적으로 사용하는 양식의 경우 회사원 전원이 읽고, 쓰고, 실행할 수 있게 해야 할 것이고 사규는 회사의 규칙이기 때문에 회사원들이 읽기는 해야 하지만 멋대로 수정하면 안되기때문에 회사원들에게는 읽기와 실행(읽을려면 실행해야 함...) 권한만 줄 수도 있다. 혹은 회사원들이 접근을 할 수는 있지만 각 부서의 부서장들에게만 쓰기 권한이 주어지거나, 특정 부서에서만 접근할 수 있는 경우도 있을 것이다.

 

그 외에도 리눅스에서는 sudo가 붙어야 정상적으로 실행되는 명령이 있다. 그 유명한 악마의 명령어 rm -rf /라던가, 뭉탱이로 폰트를 설치한다던가(리눅스는 폰트 파일을 글꼴이 설치되는 폴더로 복사하면 된다)... /usr/ 이런 폴더는 함부로 접근해서 파일 삭제하면 X되므로 sudo가 없으면 권한 없다고 작업이 안된다. 참고로 rm -rf/가 악마의 명령어인 이유는 쓰면 X되기때문이니까 절대 쓰지 말자. 누텔라가 악마의 잼인 이유랑 전혀 결이 다르다. 인생이 하드코어 모드로 바뀔수도 있다 하드코어 정도가 아니라 그냥 나이트메어 난이도지 

 

사촌(?)격인 chown은 파일의 소유권을, chgrp는 파일 그룹을 바꾼다. 나도 뭔지는 모름.


기본 양식

chmod [OPTION] [MODE] [FILE]

 

사용 방법

chmod u=rw file.text

file.text의 소유자(User)에게 읽기, 쓰기 권한을 준다.

 

chmod a=rwx file.text //전원에게 읽고/쓰고/실행할 수 있는 권한을 부여
chmod g-wx file.text //그룹(Group)에게서 쓰고/실행할 수 있는 권한 삭제
chmod u+w file.text //파일의 소유자에게 쓰기 권한을 부여

이런 식으로 +, -로 첨삭도 된다. 근데 +와 -는 이미 설정된 권한을 바탕으로 첨삭을 하는거라서 이 파일에 원래 어떻게 권한이 부여됐는지를 알아야 하는데 그걸 ls -l로 알 수 있다나... 사실 8진수로 많이 씀... 응? 근데 u g a 이런게 뭐예요? 그거는 인제 8진수 형식 설명하면서 알려드림.

 

 

8진수 형식은 chmod 755 이런 식으로 쓴다. 근데 저 세 개가 뭐임? 순서대로 파일의 소유자(user), 그룹(group), 그 외(other?) 사용자라고 보면 된다. 위 예시에 나온 a는 ugo 전체.

 

chmod 755 file.text

이게 뭔 소리냐... 저 숫자는 순서대로 파일 소유자, 그룹, 기타 사용자에 대한 rwx 권한이다. rwx는 각각 Read, Write, eXecution으로 읽고 쓰고 실행하는 권한을 나타낸다. 즉 저 명령어는 파일의 소유자는 rwx를 다 주고, 그룹과 다른 사용자에게는 읽고 실행하는 권한만 준다는 얘기이다. 예? 그걸 어떻게 아세요?

 

저기서 일단 u에 해당하는 7을 이진수로 바꾸면 111이다. r이 1, w가 1, x가 1이니까 111이고 8진수로 바꾸면 7이다. 마찬가지로 그룹과 다른 사용자의 권한인 5는 r, x는 1인데 w가 0이라 101, 5가 된다. 그럼 750은? 사용자는 모든 권한을 다 주고, 그룹은 읽고 실행하는 권한만 주고, 다른 사용자에게는 아무 권한도 주지 않는다는 얘기. 0이면 권한이 없어진다. 편하게 외우고 싶다면 r(read)은 4, w(write)는 2, x(execution)는 1이고 각 권한에 대해 1은 권한 부여, 0은 권한 박탈이라고 외우면 된다.

 

'Coding > 코딩잡담' 카테고리의 다른 글

SMILES  (0) 2022.10.06
불 대수와 논리게이트  (0) 2022.09.26
스택과 큐  (0) 2022.09.19
이진 탐색 알고리즘  (0) 2022.09.08
시스템 소프트웨어와 응용 소프트웨어  (0) 2022.08.31

참고로 60갑자가 뭔지 궁금하면 달력을 보자. 올해는 임인년이라 인월 인일 인시에 사인검 하나 나온다. (인년 인월 인일 인시 해서 사인이라 사인검이다)


60갑자는 천간 10개와 지지 12개로 이루어지는데... 어? 뭐임? 하나 할인해요? ㄴㄴ 10과 12의 최소공배수가 60임다.

천간: 갑을병정무기경신임계
지지: 자축인묘진사오미신유술해

이렇게 된다. 뒤에 있는 지지가 여러분의 띠이기도 하다. 내가 태어나는 해에도 당연히 갑자가 있고 이게 60년마다 한번씩 돌아오기 때문에 환갑 = 61세(만 60세)에 치른다. 또한 지지가 12개이기때문에 띠동갑은 12살이다.

 

cheongan = ['갑','을','병','정','무','기','경','신','임','계'] * 12
gigi = ['자','축','인','묘','진','사','오','미','신','유','술','해'] * 10
gabja_list = list()

for i in range(len(cheongan)):
  gabja = '{}{}'.format(cheongan[i],gigi[i])
  gabja_list.append(gabja)

print(gabja_list)

천간과 지지가 10개, 12개니까 120으로 잡고 각 배열을 곱했다. 이게 최선임...

['갑자', '을축', '병인', '정묘', '무진', '기사', '경오', '신미', '임신', '계유', '갑술', '을해', '병자', '정축', '무인', '기묘', '경진', '신사', '임오', '계미', '갑신', '을유', '병술', '정해', '무자', '기축', '경인', '신묘', '임진', '계사', '갑오', '을미', '병신', '정유', '무술', '기해', '경자', '신축', '임인', '계묘', '갑진', '을사', '병오', '정미', '무신', '기유', '경술', '신해', '임자', '계축', '갑인', '을묘', '병진', '정사', '무오', '기미', '경신', '신유', '임술', '계해', '갑자', '을축', '병인', '정묘', '무진', '기사', '경오', '신미', '임신', '계유', '갑술', '을해', '병자', '정축', '무인', '기묘', '경진', '신사', '임오', '계미', '갑신', '을유', '병술', '정해', '무자', '기축', '경인', '신묘', '임진', '계사', '갑오', '을미', '병신', '정유', '무술', '기해', '경자', '신축', '임인', '계묘', '갑진', '을사', '병오', '정미', '무신', '기유', '경술', '신해', '임자', '계축', '갑인', '을묘', '병진', '정사', '무오', '기미', '경신', '신유', '임술', '계해']

그러면 이렇게 나온다. 에이 60갑자라면서요?

['갑자', '을축', '병인', '정묘', '무진', '기사', '경오', '신미', '임신', '계유', '갑술', '을해', '병자', '정축', '무인', '기묘', '경진', '신사', '임오', '계미', '갑신', '을유', '병술', '정해', '무자', '기축', '경인', '신묘', '임진', '계사', '갑오', '을미', '병신', '정유', '무술', '기해', '경자', '신축', '임인', '계묘', '갑진', '을사', '병오', '정미', '무신', '기유', '경술', '신해', '임자', '계축', '갑인', '을묘', '병진', '정사', '무오', '기미', '경신', '신유', '임술', '계해'
'갑자', '을축', '병인', '정묘', '무진', '기사', '경오', '신미', '임신', '계유', '갑술', '을해', '병자', '정축', '무인', '기묘', '경진', '신사', '임오', '계미', '갑신', '을유', '병술', '정해', '무자', '기축', '경인', '신묘', '임진', '계사', '갑오', '을미', '병신', '정유', '무술', '기해', '경자', '신축', '임인', '계묘', '갑진', '을사', '병오', '정미', '무신', '기유', '경술', '신해', '임자', '계축', '갑인', '을묘', '병진', '정사', '무오', '기미', '경신', '신유', '임술', '계해']

1+1됐다. 

cheongan = ['갑','을','병','정','무','기','경','신','임','계'] * 12
gigi = ['자','축','인','묘','진','사','오','미','신','유','술','해'] * 10
gabja_list = list()

for i in range(len(cheongan)):
  gabja = '{}{}'.format(cheongan[i],gigi[i])
  gabja_list.append(gabja)

gabja_list = set(gabja_list)
gabja_list = list(gabja_list)
print(gabja_list)

그래서 이렇게 만들고 set->list로 변환하는 과정을 거치면

['신유', '기미', '무신', '병인', '기묘', '신묘', '갑진', '신사', '계사', '을해', '을묘', '경진', '경신', '갑술', '무자', '경자', '임오', '병신', '신축', '기사', '병진', '기해', '임진', '계해', '갑자', '신해', '임자', '경인', '을축', '정사', '계묘', '갑신', '계유', '을사', '갑인', '정유', '무인', '임술', '경오', '을미', '계미', '병술', '임신', '기축', '병자', '임인', '계축', '무오', '을유', '갑오', '경술', '신미', '정미', '정축', '정묘', '무진', '기유', '병오', '정해', '무술']

순서는 개판이지만 길이라 1/2로 줄어드는 기적을 볼 수 있다.

 

cheongan = ['갑','을','병','정','무','기','경','신','임','계'] * 6
gigi = ['자','축','인','묘','진','사','오','미','신','유','술','해'] * 5
gabja_list = list()

for i in range(len(cheongan)):
  gabja = '{}{}'.format(cheongan[i],gigi[i])
  gabja_list.append(gabja)

print(gabja_list)

근데 저렇게 하면 코드도 복잡하고 애초에 반으로 줄여서 하면 그럴 필요가 없잖음? set 만들었다가 하면 순서도 개판이고. 그럼 최소공배수가 60이니까 천간 배열은 6번, 지지 배열은 길이가 12니까 5번 곱하면 되잖음.

['갑자', '을축', '병인', '정묘', '무진', '기사', '경오', '신미', '임신', '계유', '갑술', '을해', '병자', '정축', '무인', '기묘', '경진', '신사', '임오', '계미', '갑신', '을유', '병술', '정해', '무자', '기축', '경인', '신묘', '임진', '계사', '갑오', '을미', '병신', '정유', '무술', '기해', '경자', '신축', '임인', '계묘', '갑진', '을사', '병오', '정미', '무신', '기유', '경술', '신해', '임자', '계축', '갑인', '을묘', '병진', '정사', '무오', '기미', '경신', '신유', '임술', '계해']

깔끔하죠? 

Profile

Lv. 34 라이츄

요즘 날씨 솔직히 에바참치김치꽁치갈치넙치삼치날치기름치준치학꽁치임..