본문 바로가기

전체 글96

공부한 것 기록하기 2 (논리 회로 / 논리적인 것을 물리적으로 만들어보기) 프로그래밍에서도 자주 사용되는 논리 연산 and or not이 있습니다. 이와 동일한 개념으로 회로에서는 0과 1로 논리적인 과정을 표현하는 것이 논리 회로입니다. 논리 회로는 가장 기초적인 회로를 논리적으로 표현한 것으로 실제 회로를 해석할 때 사용된다. 기본적으로 not, buffer, and, or gate가 있다. 이때 gate란 하나 이상의 논리 입력에 대해서 하나 이상의 출력이 있는 것을 gate라고 한다. NOT gate 이 회로는 입력이 들어오면 반대로 반전시키는 역할을 하게 된다. 이것을 실제 회로로 구성해보았다. 실습은 arduino와 트랜지스터(NPN)로 구현하였다. AND gate 모든 입력이 1이여야 최종 출력도 1인 gate입니다. 이 포스팅 속에 회로에 대해서 저항 값은 정밀하.. 2023. 9. 13.
공부한 것 기록하기 1 (디지털과 아날로그) 현실세계 물리적인 양은 연속적으로 변화하는 값이 많음 => 온도, 습도, 소리, 빛 등등 이런 것을 아날로그 양이라 함 디지털 양은 딱 두 가지로만 표현할 수 있는 물리량을 디지털 양이라 함 디지털 시스템은 이산적인 데이터가 들어오면 나가는 것도 이산적인 정보출력하는 시스템 아날로그 시스템은 연속적인 데이터가 들어오면 나가는 것도 연속적인 정보를 출력하는 시스템 연속적인 값을 이산적인 정보로 변환하는 것을 ADC(analog to digital converter)라 함 디지털 시스템의 장점 1. 내 외부 잡음에 강하다. 강하다는 것이지 잡음이 없는 것은 아님 => 이때 잡음이란 원래의 정보가 아닌 다른 불순물이라 생각하면 됨 2. 설계가 용이 3. 설계가 용이하다는 것은 전체 시스템을 프로그래밍으로 제어.. 2023. 8. 31.
파이썬으로 이중연결리스트를 만들어보자! (추가 연산, 탐색 연산) 지난 시간에는 단순연결리스트를 만들어보았습니다. 이번에는 연결이 이중으로 된 이중연결리스트를 만들어보겠습니다. 이중연결리스트의 노드는 자신을 기준으로 다음에 있는 노드가 next 노드, 이전을 prev 노드라고 하겠습니다. 이를 그림으로 그려보면 다음과 같습니다. head node와 tail node 부분을 보면 None이 있는데 head node의 이전이 없어서 None이며, tail node도 다음이 없어서 None으로 표시한 것입니다. 각 노드를 보면 data와 next, prev 총 3가지 속성이 있는 것을 알 수 있습니다. 그래서 Node class에는 3개의 인스턴스 변수가 들어가게 됩니다. 코드로 알아보면 다음과 같습니다. class Node: def __init__(self, data): .. 2023. 1. 29.
단순연결리스트로 스택 구현하기(Stack 자료구조, FILO : first in Last out) 지난 번에 단순 연결리스트를 구현해보았고 이번에는 이 단순 연결리스트를 이용하여 먼저 들어온 친구는 가장 나중에 나가는 Stack이라는 자료구조를 만들어보려고 합니다. 파이썬에서는 이미 스택 자료구조를 리스트 자료형(동적배열)을 이용하여 구현이 되어있습니다. 파이썬으로 연결리스트 만들기 4탄 : 단순 연결리스트 삭제연산 (맨 앞 노드 삭제 / 맨 뒤 노드 삭 이번에는 단순 연결리스트에서 노드를 삭제하는 방법을 알아보겠습니다. 노드를 삭제할 때는 맨 앞 노드를 삭제 / 맨 뒤 노드 삭제 / 중간 노드 삭제로 경우를 나눌 수 있습니다. 그렇다면 삭제 c-i-s.tistory.com 우선 지난번에 만든 단순 연결리스트의 시간복잡도를 알아보겠습니다. (추가, 삽입, 삭제, 탐색) 추가연산 O(1) 삽입연산 O(.. 2023. 1. 29.
아두이노 서보모터로 카카오톡 공감 스티커 자동 클릭 매크로(Arduino / servo moter / 자동 클릭) 요즘 카카오톡 프로필에 공감 스티커가 생겼습니다. 손으로 누르기가 힘들어서 아두이노를 이용하여 자동 클릭 장치를 만들어보았습니다. 개인적으로 만들어본 소감은 프레임이 정말 단단해야한다. 그리고 터치 역할을 그냥 볼펜 뒤에 있는 평범한 터치펜으로 해보았는데 터치 감도가 매우 중요했습니다. 그런 부분만 빼면 회로와 코드는 정말 쉬웠습니다. 만들기 과정 필수 준비물 : 아두이노, 브레드 보드(크기 상관 없음), 조이스틱, 서보모터, 서보모터 팔, usb 연결선, 터치 가능한 물체, 각종 점퍼선 조이스틱의 역할은 시작, 멈춤, 딜레이 속도 빠르게, 딜레이 속도 느리게 4개의 역할을 수행하게 될 것입니다. 기본적인 회로입니다. 틴커캐드에 조이스틱이 없어서 가변저항으로 표현하려다가 오해가 생길 수 있으니 이렇게 표.. 2023. 1. 6.
육십갑자를 파이썬으로 알아보자!(올해는 계묘년 : 검은 토끼의 해) 올해는 2023년 계묘년입니다. 그렇다면 자신이 태어난 년도에 무엇으로 불렸는지 알고 계신가요? 육십갑자는 "갑을병정무기경신임계"라 하는 천간 10개와 "자축인묘진사오미신유술해"라 하는 지지12개를 하나 씩 번갈아가면서 붙인 것을 육십갑자라 합니다. 올해는 천간 10개 중 계에 해당하고 지지 12개 중 묘에 해당합니다. 육십갑자를 만드는 원리는 갑 을 병 정 무 기 경 신 임 계 자 축 인 묘 진 사 오 미 신 유 술 해 가장 첫 번째는 '갑'과 '자'를 합쳐서 갑자년 이라 합니다. 이런 식으로 갑자년의 다음 해는 '을'과 '축'을 합쳐 을축년, 그 다음 해는 병인년 -> 정묘년 -> 무진년 -> ,,, 이렇게 계속 돌아갑니다. 하나 씩 하다보면 계유년에서 계 다음이 갑으로 순환하는 구조입니다. 때문에 .. 2023. 1. 5.
파이썬으로 연결리스트 만들기 4탄 : 단순 연결리스트 삭제연산 (맨 앞 노드 삭제 / 맨 뒤 노드 삭제 / 중간 노드 삭제 방법) 이번에는 단순 연결리스트에서 노드를 삭제하는 방법을 알아보겠습니다. 노드를 삭제할 때는 맨 앞 노드를 삭제 / 맨 뒤 노드 삭제 / 중간 노드 삭제로 경우를 나눌 수 있습니다. 그렇다면 삭제할 노드가 맨 앞인지, 맨 뒤인지, 중간인지 판단할 수 있어야 합니다. 만약 잘 판단했다고 치고 맨 앞 노드를 삭제하는 경우는 다음과 같습니다. 맨 앞 삭제 reference head -> -> -> .... data a b c d .... i) 맨 앞 노드 삭제 방법 -> head.next가 head가 된다. 맨 앞 삭제 reference head -> -> .... data a b c d .... 그러면 단순 연결리스트는 head 부터 시작하니까 a가 자연스럽게 끊어집니다. 방법을 알았으면 코드를 작성해야합니다. .. 2023. 1. 1.
마이크로소프트 제품 리뷰 / 서피스 프로 8 / 서피스 아크 마우스 / 서피스 트래블 허브 사용 후기 최근에 서피스 프로9가 나오고 나서 서피스 프로8이 굉장히 싸게 나왔더라구요. 예전부터 서피스 제품 사고 싶었는데 이번 기회에 사게 되었습니다. 제가 기존에 쓰던 제품은 Zenbook Duo 14 RAM 16GB 제품을 사용했었습니다. 21년도 모델이였습니다. 젠북 듀오의 장점 : 얘도 모니터가 두 개라 굉장한 생산성을 보여주었습니다. 아래의 스크린에 브라우저를 띄운다던가 아니면 폴더 두 개를 띄워놓고 아주 편리하게 사용할 수 있었습니다. 생산성에 있어서는 정말 최고의 노트북이라고 생각합니다. 스크린이 기본으로 두 개를 장착시켜주니 정말 매력적인 제품이였습니다. 젠북 듀오의 아쉬운 단점 : 우선 무겁습니다. 1.6kg 입니다.여기에 충전기까지 더한다면? 굉장히 무겁습니다. 들고 다니기에는요. 그러나 제가.. 2022. 12. 22.
파이썬으로 연결리스트 만들기 3탄 : 단순 연결리스트 삽입 연산(원하는 곳에 삽입하자! / 맨 뒤에 삽입 / 맨 앞에 삽입 / 중간에 삽입) 지난 시간 단순 연결리스트의 추가 연산에 대해서 알아보았습니다. 파이썬으로 연결리스트 만들기 2탄 : 단순 연결리스트 추가 연산 (연결리스트 자동 출력 만들기) 이전에 만들었던 코드에 이어서 이번에는 추가 연산을 하는 기능을 추가해보겠습니다. 추가 연산은 두 가지 경우의 수가 있음을 유추해볼 수 있습니다. 1. 이미 있는 연결리스트의 뒤에 추가하 c-i-s.tistory.com 이번에는 원하는 위치에 삽입하는 과정에 대해서 알아보도록 하겠습니다. 그림으로 우선 알아보도록 하겠습니다. 원리는 간단합니다. 삽입할 위치에 노드를 연결시켜주면 됩니다. 이렇게만 말만하면 너무 쉽게 느껴집니다. 이 과정을 조금 더 자세하게 알아보겠습니다. 위 그림 대로라면? 1) 삽입 할 위치와 리스트에 연결할 값을 입력받는다. .. 2022. 12. 6.
파이썬으로 연결리스트 만들기 2탄 : 단순 연결리스트 추가 연산 (연결리스트 자동 출력 만들기) 이전에 만들었던 코드에 이어서 이번에는 추가 연산을 하는 기능을 추가해보겠습니다. 추가 연산은 두 가지 경우의 수가 있음을 유추해볼 수 있습니다. 1. 이미 있는 연결리스트의 뒤에 추가하는 경우 2. 연결리스트가 비어있을 때 추가하는 경우 이미 있는 연결리스트 뒤에 추가하는 경우 동작 과정입니다. 1) 새 노드를 생성한다. 2) tail node의 다음이 새 노드를 가리킨다. 3) 새 노드는 tail node가 된다. 비어있는 연결리스트에 추가하는 경우 동작 과정입니다. 1) 새 노드를 생성한다. 2) 새 노드가 head node가 된다. 3) 새노드가 tail node가 된다. 그렇다면 연결리스트가 비어있는지 있는지 판단해야합니다. 이는 조건문으로 해결해야합니다. head 노드가 비어있다면 그 연결리스.. 2022. 12. 4.
파이썬으로 연결리스트 만들기 1탄(자료구조 / 단순 연결리스트 / 이중 연결리스트 / 추가 / 삽입 / 삭제 / 접근) 파이썬의 클래스에 대해서 익숙해지는 시간을 가지기 위해서 간단한 자료구조인 Linked List, 연결리스트에 대해서 알아보도록 하겠습니다. 연결리스트는 각 노드를 선으로 연결한 것이라 할 수 있습니다. 그림으로 표현하면 다음과 같습니다. 저 그림을 조금 더 자세히 표현하면 이렇게 표현할 수 있고 이 그림은 단방향으로 연결되어 있어서 단순 연결리스트 또는 Singly Linked List 라고도 합니다. 저기 사각형 하나는 노드(Node)라고 합니다. 연결리스트는 노드들이 연결된 것이고 노드에는 값과 다음 노드를 가리키는 정보가 들어있습니다. 노드가 많이 필요할 수 있으니까 이를 class로 만들면 편합니다. 클래스를 만들 때는 속성과 행동을 봐야합니다. Node 클래스의 속성은 값과 다음 노드를 가리키.. 2022. 12. 4.
호기심 파이썬 : 메소드 (메소드 만드는 법 / 파이썬 클래스 메소드 / 스택을 구현해보자!) 지난 포스팅에서 생성자에 대해서 알아보았습니다. 이번에는 method에 대해서 알아보도록 하겠습니다. method는 클래스의 기능이라고 보면 됩니다. def를 이용해서 만들며 함수 기본 문법을 이용해 만듭니다. 우리가 평소 자주 사용하던 list 자료형도 사실은 객체입니다. 클래스로 구현이 되어있습니다.(파이썬은 전부 객체로 이루어져 있습니다.) 보통 처음 파이썬을 처음 공부할 때 리스트에 추가할 때 리스트변수.append(값) 이런 형태로 사용을 했는데 이때 append 함수라고 용어를 배우는 부분이 있는데 사실 함수가 아니라 append method라고 불러야 맞는 말입니다. (처음 배우고 기능적으로 별 차이도 없는데 용어를 구분해서 부른다면 헷갈리는 부분이 있기 마련입니다. 클래스까지 학습을 한다면.. 2022. 12. 2.
호기심 파이썬 : 클래스 (생성자 / 인스턴스 생성 후 초기화 / 인스턴스 변수 접근 / 접근 지정자) 이번에는 클래스 생성자 문법에 대해서 알아보겠습니다. 클래스를 이용하여 객체를 만들면 객체 고유의 속성 값을 가질 수 있습니다. 물론 필요없다면 안 가져도 됩니다. 오늘 알아볼 내용입니다. 1. 생성자 2. 접근 지정자 class Person: def __init__(self, name, age): """사람 객체 속성값 초기화""" self.name = name self.age = age p1 = Person("홍길동", 20) print(f"안녕하세요 제 이름은 {p1.name}이고, 나이는 {p1.age}살 입니다.") 1. 생성자 __init__ 메소드를 간략히 init method 라고 합니다. 함수에 밑줄이 양쪽에 두 번 그어져 있으면 특별한 기능을 하는 메소드입니다. 여러 가지 특수 메소드 .. 2022. 11. 30.
호기심 파이썬 : 객체를 알아보자 객체 지향 프로그래밍에 대해서 알아보도록 하겠습니다 객체 지향 프로그래밍은 객체를 사용해서 프로그래밍을 짜는 것입니다. 그렇다면 객체에 대해서 알아야합니다. 객체는 속성과 행동을 가지고 있는 것들을 의미하는데요. 예를 들어 게임 캐릭터들끼리 싸우는 코드를 만들 때 다음과 같이 만들 수 있습니다. # 캐릭터1 설정 user1_name = "코딩" user1_hp = 100 user1_mp = 200 user1_skill1 = 10 user1_skill2 = 20 # 캐릭터2 설정 user2_name = "발록" user2_hp = 500 user2_mp = 250 user2_skill1 = 5 user2_skill2 = 7 # 서로 한 대씩 주고 받기 user2_hp -= user1_skill1 user1.. 2022. 11. 29.
[파이썬 GUI] tkinter 7 화면 전환~~ (Frame을 이용한 화면 전환) tkinter로 화면 전환에 대해서 궁금해 하시는 분들이 많이 있는 것 같습니다. 프로그램들을 실행시키다 보면 이전과 다음을 클릭하도록 되어있는 것을 종종 볼 수 있습니다. 그것과 같이 화면을 전환하는 방법에 대해서 알아보겠습니다. 화면을 전환하려면 우선 각 화면을 만들어야 합니다. 매번 하던 방식은 root = Tk() Label(root, text="어쩌구" ... 이런 식으로 기본 화면에 만들었는데 이제는 각 화면을 따로따로 만들어주도록 하겠습니다. 그리고 버튼을 통해 이전과 다음 페이지로 넘어 갈 수 있도록 하겠습니다. 화면을 frame이라고 합니다. 그래서 Frame 위젯을 이용해야합니다. 이 Frame으로 각 화면을 만들어주도록 하겠습니다. from tkinter import * root = .. 2022. 11. 24.
[정보보안기사] 시스템 보안 #3 리눅스 파일 또는 디렉터리 권한 [정보보안기사] 시스템 보안 #2 윈도우와 리눅스의 차이점 / 리눅스를 다루기 위한 기본 지식1 파 시스템 보안은 운영 체제를 잘 다룰 수 있는지 물어보는 것 같습니다. 운영체제(OS: Operating System)는 컴퓨터를 편리하고 효과적으로 사용하기 위해서 여러 프로그램들이 모여있는 것입니다. 윈도 c-i-s.tistory.com 이전에 리눅스에서 파일을 다룰 때 권한에 대해서 이야기를 했습니다. 소유자의 권한/그룹 권한/그 외 사용자의 권한 이 순서대로 권한이 표시되어 있었습니다. 윈도우와 리눅스 모두 파일에 대해서 권한이 중요하지만 리눅스가 특히 더 중요한 것 같습니다. 운영체제를 사용하는 목적이 다르기 때문에 생기는 일 같습니다. 윈도우는 보통 개인이, 리눅스는 주로 서버로 사용이 되죠. 서.. 2022. 11. 9.
[콜라츠 추측] 파이썬 GUI로 콜라츠 추측 알아보기2 [콜라츠 추측] 파이썬 GUI로 콜라츠 추측 알아보기1 콜라츠 추측에 대해서 들어보셨나요? 콜라츠 추측이란 임의의 양의 정수 n에 대해서 홀수 일 경우 3*n + 1을 하고 짝수일 경우 n / 2를 하는데 이를 임의의 양의 정수에 수행하면 항상 마지막은 4 2 1 c-i-s.tistory.com 해당 포스팅에 이어지는 내용입니다. 우선 gui로 표현하기 위해 공간을 만들어보겠습니다. from tkinter import * root = Tk() root.title("콜라츠 추측") root.geometry("1600x800+100+100") root.mainloop() -> 가로 1600, 세로 800입니다. -> 프로그램의 등장 위치는 좌 상단으로 부터 가로 100 세로 100 떨어진 위치에 나옵니다. .. 2022. 11. 3.
[콜라츠 추측] 파이썬 GUI로 콜라츠 추측 알아보기1 콜라츠 추측에 대해서 들어보셨나요? 콜라츠 추측이란 임의의 양의 정수 n에 대해서 홀수 일 경우 3*n + 1을 하고 짝수일 경우 n / 2를 하는데 이를 임의의 양의 정수에 수행하면 항상 마지막은 4 2 1 순으로 수렴한다는 것이 콜라츠 추측입니다. 5에 대해서 이 과정을 수행해보면 5 -> 홀수 -> 5 x 3 + 1 -> 16 16 -> 짝수 -> 16 / 2 -> 8 8 -> 짝수 -> 8 / 2 -> 4 4 -> 짝수 -> 4 / 2 -> 2 2 -> 짝수 -> 2 / 2 -> 1 1 -> 홀수 -> 1 x 3 + 1 -> 4 4 -> 짝수 -> 4 / 2 -> 2 2 -> 짝수 -> 2 / 2 -> 1 ... ... 결과적으로 마지막에는 4 -> 2 -> 1이 계속 반복이 됨을 알 수 있습니다.. 2022. 11. 3.
[정보보안기사] 시스템 보안 #2 윈도우와 리눅스의 차이점 / 리눅스를 다루기 위한 기본 지식1 파일 다루기 / ls 명령어 / cd 명령어 / mkdir 명령어 / touch 명령어 시스템 보안은 운영 체제를 잘 다룰 수 있는지 물어보는 것 같습니다. 운영체제(OS: Operating System)는 컴퓨터를 편리하고 효과적으로 사용하기 위해서 여러 프로그램들이 모여있는 것입니다. 윈도우를 관리하는 것을 생각해보면 일반적으로 파일 관리, 계정 관리, 방화벽 관리, 프로세스 관리, 프로그램 설치, 게임 설치..ㅎ 가장 기본적으로 파일 관리하는 방법을 알아보겠습니다. 윈도우에서 파일 관리는 일반 사용자가 접근할 수 있는 파일 또는 폴더 / 관리자가 접근할 수 있는 파일 또는 폴더 / 삭제 / 이동 / 수정 / 파일 및 디렉터리 만드는 법 총 5가지 정도가 있는 것 같습니다. 1. 일반 사용자 / 관리자 디렉터리 또는 파일 구분 법 2. 파일 및 디렉터리 만드는 방법 3. 파일 수정하는 .. 2022. 11. 1.
[파이썬 GUI] tkinter 6(특정 키를 누를 때 동작하는 bind함수/로그인 창 음영 넣는 법) 특정 키를 누를 때 동작할 수 있게 만드는 bind 함수에 대해서 알아보겠습니다. bind 함수는 위젯에 적용시킬 수 있습니다. 여기서 위젯이란 Label, Entry, Button 등을 모두 위젯이라고 하고 프로그램 화면에 보이는 대부분이 위젯이라고 볼 수 있습니다. 기본적으로 사용하는 방법을 알아보고 로그인 창에서 볼 수 있는 입력을 유도하는 음영을 표현해보겠습니다. 1. 기본 사용 방법 2. 로그인 창 입력 유도를 위한 음영 넣기 1. 기본 사용 방법 from tkinter import * def mouse_left_click(event): # 반드시 event 매개변수를 전달합니다. global label1 label1['text'] = "누르면 이렇게 변함" # 뭐가 들어오는지 확인해보자! pr.. 2022. 10. 28.
[정보보안기사] 시스템 보안 #1 (리눅스 서버 보안: Kali linux 설치) 정보보안기사 자격증 취득에 도전해보려고 합니다. 글자로 이 내용을 습득하기 보다는 실제 테스트를 해보면서 익혀보려고 합니다. 지난 번에 두 번 도전을 했는데 모두 50점대.... 제대로 다시 기본부터 익혀보려고 합니다. 정보보안기사는 시스템 보안, 네트워크 보안, 애플리케이션 보안, 정보보안 일반, 법규로 각 과목이 나뉘어져 있습니다. 법규야 뭐 어쩔 수 없지만 나머지는 실습을 통해서 알아보겠습니다. 우선 거의 대부분 리눅스로 실습이 가능한 것으로 알고 있습니다. 그래서 kali linux를 설치해보겠습니다. 1. kali linux 다운로드 2. kali linux 설치 3. 기본 업데이트 1. kali linux 다운로드 https://www.kali.org/get-kali/#kali-installe.. 2022. 10. 27.
[파이썬 GUI] tkinter 5(입력 위젯 만들기) 이번에는 문자열을 입력받을 수 있는 위젯을 만드는 방법을 알아보겠습니다. 요번까지 Label, Button, Entry까지 하고 나면 기본적인 GUI를 만들 수 있습니다. 이를 이용하는 간단한 응용 방법에 대해서도 알아보도록 하겠습니다. 어떤 값을 입력받으려면 Entry 위젯을 사용해야 합니다. Entry에 대해서 다음 순으로 알아보도록 하겠습니다. 1. 기본 사용 방법 2. Entry 옵션 3. 버튼을 이용한 응용 방법 1. 기본 사용 방법 기본 사용방법은 우선 나타나게 하는 방법입니다. 지금까지 해왔던 Label, Button과 비슷한 구조입니다. from tkinter import * gui = Tk() gui.title("입력을 받아보자!") gui.geometry("400x300+300+300".. 2022. 10. 26.
구글 애드센스 광고 클롤러 오류 얼마전 카카오 데이터 센터 화재로 인해 구글 광고가 끊겼네요... 제 블로그에서 수익이 날 거라는 기대는 하지 않지만 그래도 찜찜하잖아요?? 애드센스 갔는데 호스팅 서버 과부하라고 하는데 호스팅 서버면 카카오를 말하는건데 이거는 어찌할 도리가 없네요..... 아직 100% 정상화가 안된건지 뭐가 뭔지 잘 모르겠네요ㅋㅋㅋ 그냥 가만히 기다리면 될까요? 2022. 10. 21.
[파이썬 GUI] tkinter 4(버튼 사용하기/버튼의 기능 만들기) 이번에는 GUI에서 특정 기능이 발휘 될 수 있는 버튼 위젯을 사용하는 방법을 알아보겠습니다. 1. 버튼 기본 사용방법 2. 버튼 속성 3. 버튼을 이용한 Label 위젯의 text변경 1. 버튼 기본 사용방법 바로 코드를 통해서 알아보겠습니다. from tkinter import * def but(): print("기능 실행") gui = Tk() gui.title("버튼 사용하기") gui.geometry("400x300+300+300") # 기본 사용법 Button(gui, text="버튼이당", command=but).pack() gui.mainloop() 이 코드의 실행 화면입니다. 버튼을 누르면 콘솔 화면에 다음과 같이 나타납니다. 코드 설명입니다. Button(gui, text="버튼이당",.. 2022. 10. 21.