전체 글

주로 백엔드, 클라우드 인프라 주제를 다룹니다
· Arduino
Arduino Serial모니터에서 입력값을 String타입으로 주고 싶은 경우에 각각 1byte버퍼로 받아서 concat()함수를 이용하는 방법도 있지만 Serial.readStringUntil( (char) )이라는 함수를 이용하면 매개변수 (char)을 만났을때 까지 문자열로 인식하여 받을수 있다. 예제 코드는 아래와 같다. void setup() { Serial.begin(9600); } void loop() { if(Serial.available()) { String inputStr = Serial.readStringUntil('\n'); Serial.println(inputStr); } } 해당 예제를 해석해보면 '\n'(개행문자)를 받을떄까지 문자들을 문자열로 받은 후 시리얼 모니터에 출력하..
https://www.acmicpc.net/problem/11653 11653번: 소인수분해 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. www.acmicpc.net 소인수 분해를 문제를 풀면서 두가지 접근 방법을 생각하였다 1) 재귀 2) 단순 반복문 우선 문제를 파악해보자 문제 : 정수 N이 주어졌을때 소인수분해하는 프로그램을 작성하시오 입력 : N(1
1. 유클리드 호제법이란? -> 유클리드 호제법이란 2개의 자연수의 최대공약수를 구하는 알고리즘이다. 여기서 '호제법' 이란 두 수가 서로 상대방 수를 나누어 결국 원하는 수를 얻는 알고리즘을 의미한다. 예를 들어 a > b라고 할때 a를 b로 나눈 나머지를 r이라고 하면 b와 r의 최대공약수는 a와 b의 최대 공약수와 같다. 15와 6 라고 가정을하면 나머지는 3이된다 15와 6의 최대 공약수는 3, 6과 3의 최대공약수는 3이된다. 다시 b와 r을 나는 나머지인 r'이라고 하면 b와 r의 최대 공약수는 r r'의 최대 공약수와 같아진다(6,3 과 3,0 -> GCD : 3) 결론적으로 맨 마지막에 나오는 r r'의 나누기 나머지가 0이 될때 a와 b의 최대공약수가 나오는 것이다. 2. 관련 문제 UR..
a = ['a','b','a','b','c','d','a','e'] 라는 리스트가 있다고 하자 여기서 'a'가 모두 삭제된 리스트를 반환하고 싶을때는 다음과 같이 매직메소드 __ne__와 filter()를 활용하면 된다. -> a = list(filter(('a').__ne__, a)) 이왕 이렇게 된거 매직메소드 __ne__에 대해 알아보자 __ne__(self,other)에서는 x!=y가 정의된다. 결론적으로 저 코드문을 해석해 보면 a의 각 원소들에 대해서 a!=(원소)를 판별하고 만약 a != a 가 False로 나올경우 a를 지우게 되는것이다
참고서적 : 누구나 쉽게SQL(홍형경 지음) 1. DDL(Data Definition Language) DDL이란 데이터 정의어이며, 이는 RDBMS에서 테이블 등 데이터 베이스 객체들을 생성, 삭제, 수정하는 SQL을 의미한다. 다음과 같은 종류가 있다. CREATE : 객체를 생성한다. DROP : 객체를 삭제한다. ALTER : 객체를 변경한다. TRUNCATE TABLE : 테이블 내 모든 데이터를 삭제한다. RENAME : 객체 이름을 변경한다. 2. DML(Data Manipulation Language) DML이란 데이터 조작(입력,수정,삭제)어이며, 가장 많이 사용되는 SQL이다. 종류는 다음과 같다. SELECT : 테이블이나 뷰에서 데이터를 조회한다. INSERT : 데이터를 입력한다...
· Bash Shell
최근에 Shell Script를 이용해 bash를 만드는것을 우연히 접하게되었습니다. 처음에는 이게 뭐지 싶다가도 Linux Command를 활용하며 막상 내가 command shell을 shell script를 이용해서 만들어 보니까 다양한 활용방안도 생각할 수 있었고, 다른것보다 이 command shell을 만드는 것이 너무 재밌었습니다. 지금은 나중에 Back End작업에서 혹은 그냥 일상에서 리눅스 작업 환경에서 쓸 저만의 command shell을 제작하고 있습니다. 최근에 만든것은 covidkr이라는 명령어인데 이 명령어는 http://ncov.mohw.go.kr/ 에서제공하는 정보를 크롤링 하여, 정보를 텍스트 파일에 저장후 shell script가 읽어 정보를 display하는 방식입니다..
· Bash Shell
shell script로 bash파일 작성시 사용자가 입력한것을 바로 배열로 저장할 수 있게 하는 방법은 다음과 같다. read명령어에 -a 옵션을 넣어주고 그 다음에 저장할 배열변수 이름을 입력해 주면 된다. read -a inputArray echo "${inputArray[@]}"
· Bash Shell
쉘 스크립트에서 echo를 통한 출력을 할 때 가로로 출력하게끔 하고싶은 경우에는 이와 같이 하면 된다. echo -n (출력할 문자열) 을 사용하면 문자열을 가로로 출력 할 수 있다.
문제는 다음과 같다. https://www.acmicpc.net/problem/1712 1712번: 손익분기점 월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 www.acmicpc.net 우선 여기서 주목해야할 세가지가 존재한다. A : 고정비용 B : 노트북 생산 비용 C : 노트북 판매 비용 아마 필자를 포함한 대부분의 사람들이 처음에는 반복문을 통한 해결방법을 생각했을 것이라 생각한다. 하지만 잘 생각해 보면 이 문제는 반복분에 의한 시간복잡도 O(n)이 아닌 단순 논리판단에 의한 시간복잡도 O(1)로 문제를 해결할 수 있다. 손익분기점은 판매 총 수익이 생산..
f- string을 사용하면서 신기한것을 발견했다.(당연한거지만 내가 모른걸수도 있지만...) 다음과 같은 코드가 있다고 보자. 이 코드를 실행하면 다음과 같은 결과가 나오게 된다. 여기서 print(f'{i : 4}') 줄에 주목해 보자. 이 부분을 해석해 보면,i의 값을최소 네 자릿수에 맞추에서 출력하겠다는 것을 의미한다. 그렇기때문에 세자리수인 100에서 1부분을 보면 위의 두자리수들에는 공백이 되어있는것을 알 수 있다.
이진검색(Binary Search)에 대해 알아보자. 이진검색 또한 검색 기법중 하나이다. 단 전제조건이 하나가 존재한다. 이진검색을 사용하기 위해서는 해당 배열의 데이터가 정렬(sort)되어있어야 한다. * 결론적으로 이진검색인 오름차순이나 내림차순으로 정렬된 배열에서 좀 더 효율적으로 검색할 수 있도록 도와주는 알고리즘이라는 것이다. 예시를 하나 들어 [5,7,15,28,29,31,39,58,68,70,95] 라는 리스트가 있고, 나는 여기서 39라는 값을 검색하고 싶다고 가정하자. 가정하자. 우선 검색 범위의 시작 인덱스를 pl, 끝 인덱스를 pr, 중간 인덱스를 pc라고 부르기로 약속하자. 과정에 대한 사진은 다음과 같다. 1) 우선 초기 검색범위는 당연히 처음(index 0)부터 끝(index ..
선형 검색 알고리즘(Linear Search Algorithm)에서 종료조건은 두가지가 존재한다. 1) 검색할 값을 찾지 못하고 배열의 맨 끝을 지나갔는가? -> 검색실패조건 2) 검색할 값과 같은 원소를 찾았는가? -> 검색 성공 조건 종료를 위해 이 두가지를 항상 검색하는데, 이 과정을 계속해서 반복하다 보면 종료조건을 검사하는 '비용(cost)'를 무시할 수 없다. 우선 기본적으로 검색 대상인 sequence가 있다면 그 sequence 맨 끝에는 검색하고자 하는 key값을 넣어준다. 여기서 sequence맨 끝에 넣어주는 이 검색하려는 key값을 '보초'라고 한다. 만약 원래 seqeunce에 자신이 찾으려는 key값이 존재하지 않는다면, 스캔 인덱스는 원래 sequence의 길이와 동일해 질 것..
이 오류가 나는 이유에는 크게 두가지 경우가 있을 수 있습니다. - Permission - mysql.sock파일의 경로가 잘못되어 있을수도 있다. : 이러한 경우가 있을 수도 있으니 find / -name mysql.sock 명령어로 mysql.sock 경로와 유무를 확인하자 - MySQL 서버 데몬이 실행되지 않아 생길 수 도 있다. -> 이 문제일 가능성이 가장 많다. - 세번째 문제 해결을 위해서는 데몬을 실행 시켜주어야 한다. 데몬 실행을 위해서는 다음과 같은 명령어를 입력해주자 $ service mysql start -> mysql -u root 이 명령어를 사용해도 되지 않는 경우에는 mysql데몬을 restart해준다. $ sudo service mysql restart $ mysql 다시..
오늘은 AWS에서 리눅스 환경 만들기 기본편에 대해서 포스팅 해보고자 합니다. 이 포스팅 실습을 위해서는 AWS의 계정이 있어야 합니다. https://aws.amazon.com/ko/ 클라우드 서비스 | 클라우드 컴퓨팅 솔루션| Amazon Web Services 부동산 Zillow, AWS를 활용하여 부동산 혁신 Zillow는 AWS 클라우드를 활용하여 부동산 산업을 온라인으로 이전해 주택 정보를 찾는 과정을 혁신했습니다. Zillow는 AWS를 통해 구매자, 판매자 및 세입자에게 정확한 주택 정보를 제공하여 빠르게 변화하는 시장에서 정보에 근거한 의사 결정을 지원합니다. 자세히 알아보기 속도와 확장에 대해 늘어나는 요구 Zillow는 15년 전에 주택의 가치를 평가하는 도구를 만들었을 때 데이터 배..
· Discord Bot
* 이 소스코드를 상업적으로 이용하는것을 금지합니다(License : GPL-3.0). 소스코드 링크는 본문 밑에 있습니다. - IDE : Jetbrain Pycharm Community - Python : ver 3.7 - discord.py version : 1.0.1 사실.... TFT라는 게임의 특성상 전적검색이 매우 불필요한 기능인건 알지만.... 군대 가기전에 할께 정말 없어서 만들어 보았습니다. 명령어는 다음과 같습니다 !롤체전적 (nickname) 표시되는 정보는 다음과 같습니다. - Rank Information : 현재 티어 / 상위 백분율 / 랭킹 - 가장 많이 사용하는 시너지(옆에는 가장 많이 사용하는 시너지 이름이 나옵니다) : 사용한 횟수 / 해당 시너지를 이용해서 1등을 한 백..
윈도우에서 django-admin.py startproject를 통해서 프로젝트를 생성하려 했지만 프로젝트가 생성되지 않고 파이참에서 admin.py창이 켜지는 등의 오류가 나는경우가 있다 그런경우에는 다음과 같이 프로젝트를 생성해주면 된다. python (자신의 가상환경 주소)\Scripts\django-admin.py startproject (프로젝트 이름) .
파이썬을 코딩할때 가상환경을 만들어서 사용하는게 좋다. 이유는 만약 다양한 모듈을 한번에 사용하게 되는 경우에는 가끔 패키지들간에 충돌이 발생하기도 하고, 간혹 환경변수를 잘못 설정하는 경우에는 파이썬 자체의 버전 또한 꼬여버리기 때문이다. 파이썬의 가상환경을 만들고, 실행하는 방법에 대해서 포스팅해볼 것이다. 예시로 폴더 하나를 만들어보자 C:\Users\jhopl\Desktop>mkdir venvtest 그 다음 만든 폴더 안으로 이동해준다. C:\Users\jhopl\Desktop\venvtest> 가상환경을 만드는 명령어는 다음과 같다. python -m venv (가상환경 이름) C:\Users\jhopl\Desktop\venvtest>python -m venv venvtest 명령어를 치면 위..
· Discord Bot
* 이 소스코드를 상업적으로 이용하는것을 금지합니다(License : GPL-3.0). 소스코드 링크는 본문 밑에 있습니다. Deprecated 디스코드봇 레인보우 식스 시즈(Rainbow Six Siege) 전적검색봇의 소스코드를 공개합니다 - IDE : Jetbrain Pycharm Community - Python : ver 3.7 - discord.py version : 1.0.1 - 데이터 출처 : r6stat 해당 봇을 사용하기 위해서는 RainbowSixSIegeSearchBot.py 의 ln[40]에 봇 토큰을 넣어주셔야 합니다 해당 봇은 PC버전 Rainbow Six Siege에 대해서만 전적검색을 합니다 명령어는 다음과 같습니다 !레식전적 (닉네임) : 통합 랭크 전적입니다. 표시되는 ..
· Discord Bot
* 이 소스코드를 상업적으로 이용하는것을 금지합니다(License : GPL-3.0). 소스코드 링크는 본문 밑에 있습니다. - IDE : Jetbrain Pycharm Community - Python : ver 3.7 - discord.py version : 1.0.1 - 데이터 출처 : 보건복지부(http://ncov.mohw.go.kr/index.jsp) 사용을 하기 위해서는 다음과 같은 명령어를 입력해주시면 됩니다. 보건복지부에서 갱신을 10~11시에 한다는점 인지하시고 사용해주세요 사용을 위해서는 ln[18]에 봇 토큰을 넣어주셔야합니다. !코로나 출력되는 정보는 다음과 같습니다 - 데이터의 최근 갱신시간 - 확진자 수 - 완치환자 수(격리해제) - 치료중인 환자 수(격리중) - 사망자 수 -..
· Discord Bot
* 이 소스코드를 상업적으로 이용하는것을 금지합니다(License : GPL-3.0). 소스코드 링크는 본문 밑에 있습니다. 디스코드봇 파파고 번역봇 소스코드를 공개합니다 - IDE : Jetbrain Pycharm Community - Python : ver 3.7 - discord.py version : 1.0.1 - API 출처 : Naver Open API(https://developers.naver.com/main/) * 해당 봇을 사용하기 위해서는 다음과 같은것들이 필요합니다 - 디스코드 봇 토큰(ln[24]) - Naver Papago API client id(ln[26]) - Naver Papago API secret(ln[28]) 상호 번역 - Korean English - Korean ..
· Discord Bot
* 이 소스코드를 상업적으로 이용하는것을 금지합니다(License : GPL-3.0). 소스코드 링크는 본문 밑에 있습니다. 디스코드봇 Player Unknown's Battle Ground ,배틀그라운드 전적검색봇 소스크도를 공개합니다. - IDE : Jetbrain Pycharm Community - Python : ver 3.7 - discord.py version : 1.0.1 - 데이터 출처 : https://dak.gg/ 배틀그라운드 전적검색 - 닥지지 배그 전적검색, 카카오 서버, 레이팅, 순위표, 대회, 랭킹, 로그, 인벤, 서버, 장애, 점검, OP.GG dak.gg 명령어에는 다음과 같은 종류들이 있습니다 - !배그솔로1 : Search player's solo que(TPP) - !배..
· Discord Bot
* 이 소스코드를 상업적으로 이용하는것을 금지합니다(License : GPL-3.0). 소스코드 링크는 본문 밑에 있습니다. 디스코드봇 메이플스토리 플레이어 정보봇 소스코드를 공개합니다. 제작시 사용된 환경은 다음과 같습니다. - IDE : Jetbrain Pycharm Community - Python : ver 3.7 - discord.py version : 1.0.1 데이터 출처 : https://maplestory.nexon.com/Home/Main 메이플스토리 새로운 개념의 멀티유저 온라인게임 maplestory maplestory.nexon.com 사용을 하기 위해서는 다음과 같이 입력해 주시면 됩니다. !메이플 (플레이어 이름) 사용을 하시기 위해서는 디스코드 봇 애플리케이션 생성후 Mapl..
· Discord Bot
Riot API를 이용해서 재구현한 디스코드봇 개발기는 이 링크로 가주세요! Api버전 개발기 디스코드봇 리그오브 레전드 전적검색봇 소스코드를 공개합니다. 제작시 사용된 환경은 다음과 같습니다. - IDE : Jetbrain Pycharm Community - Python : ver 3.7 - discord.py version : 1.0.1 사용하기 위해서는 봇 애플리케이션을 만드신 다음 lolSearchbot.py의 ln[49]에 bottoken값을 넣어주셔야 합니다. 해당 봇은 리그오브레전드 한국서버 전적검색만 지원합니다. !롤전적 (닉네임) 을 디스코드에서 입력해 주시면 됩니다. op.gg로부터 소환사 전적을 검색하며, 보여지는 정보로는 - op.gg소환사 링크 - 솔로랭크 정보 : 티어, LP, ..
· Discord Bot
최근에 여러 게임을 즐기고 있는 저는 디스코드 사용을 많이 함에 따라, 디스코드에서 편하게 사용해볼수 있는 기능들을 만들어 보고, 봇에 적용해 보고 있습니다. 앞으로 이 카테고리에서는 제가 구현해본 여러가지 기능들을 포스트해볼 예정입니다. 우선 오늘, 이 카테고리의 첫 글로는 디스코드 봇을 생성하는 방법에 대해 알아보겠습니다. 디스코드 봇을 생성하기 위해서는 우선 이 사이트로 들어가 주어야 합니다 https://discordapp.com/developers/applications/ Discord Developer Portal — API Docs for Bots and Developers Integrate your service with Discord — whether it's a bot or a game..
해당 카테고리는 저의 깃허브에 올려놓은 (https://github.com/J-hoplin1/Network-Theory-for-beginner) 마크다운 문서를 올려놓은 카테고리입니다. 가독성을 좋게 보시고 싶으신 분들은 깃허브 링크로 가는것을 추천드립니당 그리고 저는 매우 실력이 없는 학생입니다.... 웹개발과 네트워크에 첫발을 디딘 분들께 저의 지식을 조금이나마 공유해보고자 작성한 글들이므로 혹여나 잘못된 내용이 있다면 댓글 혹은 jhoplin7259@gmail.com 으로 연락주시면 감사하겠습니다
모든 PC를 리눅스로 사용하던 필자는 어느날 윈도우의 부재와 필요성을 뼈저리게 느끼게 되어서 PC하나를 윈도우로 바꾸기로 결심먹었다. 윈도우 부팅 USB는 다 만들었는데 문제가 생겼다. 설치가 안된다. 오류 내용으로는 다음과 같은게 나왔다. "이 디스크에 Windows를 설치할 수 없습니다.선택한 디스크에 MBR파티션 테이블이 있습니다. 시스템에서는 GPT 디스크에만 Windows를 설치할 수 있습니다." 라는 오류문구가 나오는 것이다. 이를 해결하기 위해서는 우선 shift+F10버튼을 눌러 CMD를 켜준 후 다음과 같이 명령어를 입력해주면 된다. 순서는 다음과 같다. 1 . diskpart 2 . list disk 3 . 윈도우를 설치할 디스크 번호에 대해서 select disk (번호) 4 . cl..
문제 출처 : https://www.acmicpc.net/problem/1929 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) www.acmicpc.net import math a,b = map(int,input().split()) for b in range(a,b + 1): if b == 1: continue if b == 2: print(b) else: boolT = True for c in range(2,int(math.sqrt(b)) + 1): # 제곱근을 통해서 나누어지는 수 검사를 줄인다. 왜냐? 수가 많아질수록 for문이 도는 속도는 더 길어지기 때문 if b % c == 0: boolT = False brea..
문제출처 : https://www.acmicpc.net/problem/11728 11728번: 배열 합치기 첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000) 둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거나 같은 정수이다. www.acmicpc.net import sys donknowwhat = list(map(int,sys.stdin.readline().split())) val = None for a in range(0,2): r = list(map(int,sys.stdin.readline().split())) if val == None: val = r else: val += ..
문제 출처 : https://www.acmicpc.net/problem/1978 import sys totalNum = int(input()) vals = list(map(int,sys.stdin.readline().split())) total_count = 0 for a in vals: if a == 1: continue if a == 2: total_count+=1 else: TF = True for b in range(2,a): if a % b == 0: TF = False break else: continue if TF == True: total_count+=1 else: continue print(total_count) 일반적인 소수판별문제랑 동일하다. 기본적으로 소수는 1과 자기자신만을 약수로..
기존 포스트에서 GET메소드는 CRUD 에서 데이터를 Read하는것에 매핑을, POST메소드는 CRUD에서 Create하는것에 매핑이 된다고 다루었다. 그렇다면 이를 해설해 보면 GET메소드는 기존의 리소스를 읽어오는것을 의미하게 되는것이고, POST같은 경우에는 리소스를 생성하는것을 의미하게 되는것이다. 웹 클라이언트가 웹 서버에 요청을 보낼때 GET 방식과 POST방식 두가지 모두를 쓸수 있다. 그렇다면 동일한 '요청' 이라는 것을 하는데, 어떤 차이점을 가진것일까? - GET방식 - 크게보기 1 . URL에 데이터를 포함시켜서 요청한다. 그렇기 때문에 전송하는데 있어서 길이 제한이 존재한다.(body가 빈상태로 전송) 2 . URL내에 정보가 포함되는 방식이기에 보안에 있어서 취약점 존재 3 . 캐..
Hoplin
Hoplin의 개발일기