본문 바로가기

전체 글90

우테코 3기 최종 코테 후기 최종 미션은 지하철 경로의 소요 시간과 총 거리를 계산하는 프로그램을 구현하는 것이었다. 결론부터 말하자면, 탈락이 거의 확실할 것 같다. 그래프를 한번도 이용해본 적이 없는데, 그래프를 이용하는 문제라서 많이 당황했던 것 같다. 최종 메일을 보내는 것도 실수로 마감 시간이 끝나고 4분 뒤에 보냈다. 이번 우테코 3기에는 참여하지 못하겠지만, 프리코스를 거치면서 앞으로 어떻게 프로그래밍을 공부해야 할지 어느정도 감이 잡혔다. 선발 과정 자체에서 배우는 것이 많았어서, 탈락하게 되더라도 준비한 기간이 아깝지는 않을 것 같다. 앞으로는 자바 공부와 스프링 공부에 시간을 많이 투자해야겠다. 아쉽지만 내년을 기약하며,,, 2020. 12. 19.
[Django] verbose_name_plural 메타 클래스, verbose_name_plural 어드민 패널을 만지다 보면 내가 등록한 모델 이름을 장고 어드민이 알아서 복수로 만들어 주는 것을 알 수 있다. 그럴때 가끔 -y 로 끝나는 단어의 끝에도 그냥 s를 붙이는 경우가 있는데, 이때 메타 클래스의 verbose_name을 이용해서 바꿔줄 수 있다. 모델 안에 내부 클래스로 메타 클래스를 추가하고 verbose_name_plural에 복수형으로 사용할 이름을 추가해준다. 2020. 11. 18.
[자료구조] 단일연결리스트 reverse 메서드 구현 (java) 단일연결리스트의 reverse 메서드를 구현해봅시다. 단일연결리스트의 객체는 head 정보, 그리고 노드는 다음 노드 정보만 가지고 있는 가장 단순한 형태의 단일연결리스트입니다. 코드로 표현하면 다음과 같습니다. public class SinglyLinkedList { Node head; static class Node { int data; Node next; } } 코드를 복잡하게 만들지 않기 위해서 toString()이나 add() 메서드는 이미 구현되어 있다고 가정하겠습니다. public class UnitTest { public static void main(String[] args) { SinglyLinkedList list = new SinglyLinkedList(); list.addLast(.. 2020. 11. 13.
[컴퓨터 구조] 메모리 계층 구조 지역성의 원칙(Principal of Locality) 컴퓨터의 메모리 시스템을 이해하기 위해 필수적으로 이해해야 하는 개념이 바로 지역성의 원칙이다. 메모리 시스템을 설명하는데 가장 많이 이용되는 것이 도서관의 비유이다. 도서관은 컴퓨터의 하드 디스크와 같다. 수많은 책이 있지만 원하는 책을 찾으려면 시간이 오래 걸린다. 나는 컴퓨터의 역사에 관한 레포트를 쓰기 위해 도서관에 왔다. 레포트를 쓰기 위해서 나는 우선 컴퓨터 분야 서가에 가서 필요할만한 책 몇권을 가지고 내 자리로 돌아올 것이다. 나는 책상 위에 책을 쌓아놓고 수시로 그 책들을 참조할 것이다. 이때 책상은 컴퓨터의 메인 메모리, 혹은 캐시 메모리와 비슷하다. 책은 몇 권 없지만 빠르게 참조할 수 있다. 도서관에서 책을 찾는 방법과 프로그램.. 2020. 11. 13.
[자료구조] 파이썬으로 단일연결리스트 구현하기 단일연결리스트 동적 배열의 단점 동적 배열은 연속된 메모리 공간에 값을 할당한다. 파이썬의 리스트는 값을 직접 저장하지 않고 해당하는 객체의 주소를 저장하는 레퍼런스 배열이기 때문에 다른 언어의 배열과는 약간 다르다. 동적 배열은 먼저 크기를 할당해 메모리 공간을 미리 확보해놓고 이후에 값을 저장하기 때문에 대부분의 경우 저장하는 요소의 수가 배열의 길이보다 작다. append 연산은 분할 분석 방식으로는 O(1) 의 시간복잡도를 가지지만 실제로는 배열이 가득 찼을 때 resize 연산을 하면서 O(n) 의 시간복잡도를 가진다. 즉 특정 시점(배열이 가득 찼을 때)에 연산 속도가 갑자기 느려진다. 이는 실시간 시스템에서는 문제를 유발할 수 있다. 동적 배열의 단점을 정리하면 아래와 같다. 동적 배열의 길.. 2020. 11. 8.
[자료구조] 파이썬으로 큐(Queue) 구현하기 큐(Queue) 큐는 한쪽 끝에서 자료를 추가하고 한쪽 끝에서 자료를 꺼내는 선형 자료 구조로 가장 먼저 들어온 자료가 가장 먼저 나가는 FIFO(First In First Out) 방식입니다. 롤에서 랭크 게임을 매칭할 때 "큐를 돌린다"라고 표현하죠. 게임 시작 버튼을 먼저 누른 사람이 먼저 게임을 할 수 있도록 처리해줍니다. 큐는 이처럼 요청이 들어온 순서대로 일을 처리할 때 사용합니다. 큐의 동작 방식 큐가 동작하는 방식을 알아봅시다. 크기가 5인 큐를 만듭니다. Queue = [None, None, None, None, None] 우선 큐는 가장 먼저 들어온 데이터를 가리키는 front 변수와 가장 나중에 들어온 데이터의 위치를 가리키는 back 변수가 필요합니다. 처음에는 큐가 비어있으므로 f.. 2020. 11. 6.
[자료구조] 파이썬으로 스택(Stack) 구현하기 스택(Stack) 스택은 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 선형 자료구조입니다. 가장 마지막에 들어온 데이터가 가장 먼저 나가는 LIFO(Last In First Out)방식을 사용합니다. 웹브라우저의 뒤로가기나 편집기의 되돌리기(undo) 기능이 이런 방식을 이용합니다. 사실 파이썬의 리스트는 스택이 가져야할 메서드를 이미 가지고 있습니다. 따라서 스택 자료형을 따로 만들 필요는 없습니다. 하지만 그냥 공부한다는 생각으로 간단하게 스택 자료형을 만들어봅시다. 기본적으로 아래의 네 가지 연산이 필요합니다. S.push(e): Top에 새로운 요소를 추가 S.pop(): Top 요소를 반환하면서 제거 S.top(): Top 요소를 제거하지 않고 반환 S.is_empty(): 스택이 비어있으면 Tru.. 2020. 11. 6.
[컴퓨터구조] CPU 성능, Clock Speed, CPI 컴퓨터의 성능이란? '어떤 컴퓨터가 더 빠른가?' 혹은 '어떤 컴퓨터가 성능이 더 좋은가?'라는 질문은 무엇을 의미할까요? 보통 속도가 빠르면 성능이 좋다고 생각할 수 있지만 항상 그런 것은 아닙니다. 여객기를 생각해보죠. 여객기 A는 여객기 B보다 속도가 3배 빠릅니다. 하지만 여객기 A는 한번에 100명의 승객을 수용할 수 있는 반면 여객기 B는 한번에 400명의 승객을 수용할 수 있습니다. 승객의 입장에서는 여객기 A가 좋겠지만 항공사 입장에서는 여객기 B가 더 좋을 것입니다. 이처럼 어떤 관점에서 평가하느냐에 따라 성능에 대한 평가가 달라집니다. 이와 마찬가지로 일반 개인 사용자의 입장에서는 하나의 작업을 개시하고 종료하는데 걸리는 시간이 빠른 것이 좋겠죠. 이를 응답시간(Response Time.. 2020. 10. 19.
환영합니다! 언어와 프로그래밍에 대한 지식을 기록합니다. 2020. 4. 27.