본문 바로가기

전체 글176

백준 20183번 골목 대장 호석 - 효율성 2 (Python) .. 우당탕탕 시행착오들.. 1. 문제 조건- N개의 교차로와 M개의 골목 (교차로 : 노드 / 골목 : 간선)- 각 간선의 가중치가 그 골목의 요금- 소지한 돈보다 많은 비용이 나오면 그 경로로는 갈 수 없음- 수치심은 경로 상에서 가장 많이 낸 돈의 금액, 최소한의 수치심을 얻어야 함- 수치심을 줄일 수록 많은 돈이 필요하고 수치심이 높을 수록 적은 돈이 필요함 - 입력 - 범위1 1 1 1 1   2. 아이디어 및 시행착오시행착오 1.  다익스트라로 경로를 이동하되, 이동한 경로의 총합으로 최소비용을 계산하는 것이 아니라, max 배열을 두고 max배열을 갱신하면서 다익스트라를 돌리려고 했다. (가지고 있는 돈보다 경로를 지나온 합이 작을 때만 갱신하도록 dist배열도 관리를 하긴 한다.) 특정 노드에 왔을 때, 그 노드까지 .. 2024. 8. 18.
백준 17135번 캐슬 디펜스 (Python) 1. 문제 조건문제 조건이 정말 많고 다양해서 문제를 잘 읽어야하는 문제였다. 당장 코드부터 써가는 버릇을 고치려고, 설계부터 하고 코드를 다 짰지만 문제를 꼼꼼히 읽지 않아 엉망진창으로 설계한 코드를 짜버리고 말았다.  문제가 복잡할 수록 조건을 잘 정리해서 빠지는 부분이 없게 설계하도록 주의해야겠다.  본 문제는 배열 내에 있는 적을 맨 아래행에 궁수를 배치해 적을 잡는 게임을 코드로 설계하는 문제이다. 게임의 규칙은 아래와 같다. 1. 궁수를 성이 있는 칸인 배열의 맨 아래행(N+1번째 행)에 3명 배치한다.2. 궁수는 각 턴마다 적 하나를 죽이며, 세 명의 궁수는 동시에 공격한다. 즉, 여러 궁수가 하나의 적을 동시에 공격할 수 있다.(적은 각 칸에 최대 한명만 존재할 수 있다.)3. 궁수가 죽일.. 2024. 8. 7.
(Python) 백준 2164번 카드2 파이썬에 적응하는 중인데, 아직 파이썬의 자료구조 활용에 많이 서툴다. 이 문제에서 List를 사용해 Queue를 구현해 풀었다가 시간초과를 만나버렸다.  초기 코드n = int(input())cards = [ i+1 for i in range(n)]while len(cards)>1: cards.pop(0) if len(cards) == 1: break cards.append(cards.pop(0))print(cards[0]) 정답 코드from collections import dequen = int(input())cards = deque([i+1 for i in range(n)])while len(cards)>1: cards.popleft() if len(cards) == 1.. 2024. 7. 20.
Python으로 Queue 사용하기 List 사용하기삽입 : append() 활용삭제 : pop(0)주의 : pop(0)은 시간복잡도가 O(N)이므로 pop이 자주 발생하는 상황에서는 비효율적이다.collections 모듈의 deque 사용하기from collections import deque#선언dq = deque([])#삽입dq.append(1)#삭제 : 원소가 없다면 IndexError발생dq.popleft()#전체 삭제dq.clear()#count : x와 같은 원소의 개수 세기dq.count(x)#회전 : n만큼 위치 이동 (n>0이면 오른쪽, nQueue활용 뿐 아니라 deque에 있는 함수들도 추가로 몇 개 정리해봤다. 나중에 deque 활용을 위해 함수들을 한번 더 정리해봐야겠다.queue 모듈의 Queue 사용하기from.. 2024. 7. 20.
[기본 문법] Python 기본 문법을 익혀보자 ! Java에 이어 Python 익히기에 도전한다. 사실 개발 처음 배울 때 Python부터 익혔는데 1년동안 사용하지 않고 Java만 미친듯이 했더니 하나도 기억나지 않는다 ^., ^  그래서 다시 공부해보는 Python 기본 문법!~ 변수Java에 비해 훨씬 간단한 Python 변수 선언. type을 지정할 필요없이 아래와 같은 형식으로 선언하면 된다. (type은 알아서 지정됨.)(변수명) = 값  a = 10000b = 'variable'print(type(a))print(type(b))# #    - 문자열을 정수로 변환num_str = "720"num = int(num_str)print(num, type(num))#720  - 문자열을 실수로 변환num_str = "720"num = float(n.. 2024. 7. 14.
자료구조 - 해시테이블 (Java, HashMap) 1. 개념해시함수를 사용하여 키를 해시값으로 매핑하고, 이 해시값을 주소로 하여 데이터를 key와 함께 저장하는 자료구조key를 활용하여 value값 조회 가능매우 빠른 평균, 삽입, 삭제, 탐색연산이 제공되는 자료구조 구성- key hash function의 input고유한 값키 값 그대로 저장할 경우 다양한 키의 길이만큼 구성해야하므로 일정한 길이의 해시로 변경함- hash functionkey를 고정된 길이의 해시로 변경해주는 함수로 해시 함수를 거치는 과정을 "hashing"이라고 함서로 다른 key가 같은 hash 값을 같게 되는 경우를 해시 충돌이라고 하며, 이 충돌이 적을 수록 좋은 해시함수라고 할 수 있음- value저장소에 저장되는 값- hash table해시함수를 사용하여 해시값으로 매.. 2024. 5. 24.
자료구조 - 한방향 연결리스트, 양방향 연결리스트 1. 연결리스트1) 개념자료의 논리적인 순서와 메모리 상의 물리적인 순서가 일치하지 않고, 개별적으로 위치하고 있는 원소의 주소를 연결하나의 전체적인 자료구조를 이룸.링크를 통해 원소에 접근하므로, 순차 리스트에서처럼 물리적인 순서를 맞추기 위한 작업이 필요하지 않음자료의 크기를 동적으로 조절해 메모리의 효율적인 사용 가능.(추가 삭제 빠름)2) 노드연결 리스트에서 하나의 원소에 필요한 데이터를 갖고 있는 자료단위- 구성요소데이터 필드 : 원소의 값링크 필드 : 다음 노드의 주소 ( 마지막 노드는 링크 값을 null로 가짐)- 헤드 : 리스트의 처음 노드를 가리키는 레퍼런스     2. 한방향 연결리스트1) 연결구조노드가 하나의 링크 필드에 의해 다음 노드와 연결되는 구조를 가짐헤드가 가장 앞의 노드를 .. 2024. 5. 24.
JPA vs Hibernate vs Spring JPA 지난 프로젝트를 회고하며 JPA에 대한 이해도가 부족한 상태에서 기술만 급하게 사용한 것은 아닌가 하는 반성이 있었다. 따라서 JPA에 대한 이해를 굳건히 하고자, 김영한 강사님의 JPA ORM ㅇㅇ 강의를 다시 수강했다.해당 강의를 수강하며 거듭 드는 생각은, 내가 프로젝트에서 사용했던 JPA와는 차이가 있었다는 것이다. EntityManager를 통해 entity CRUD를 진행하는 강의와는 달리, 프로젝트에서는 Repositoy 인터페이스를 구현해 활용했기 때문에 이 둘 사이의 어떤 차이가 있는가에 대해 정리하고 넘어가려 한다.따라서 이번 게시글에서는 JPA, Hibernate, Spring Data JPA에 관하여 다루고, 비교해볼 것이다.JPAJPA는 Java Persistence API의 약자.. 2024. 5. 9.
백준 12904번. A와B (Java) 1. 문제 조건 2. 아이디어 주어진 시간은 2초이다. S의 길이는 최소 1에서 최대 999, T의 길이는 최대 1000이다. S에서 T가 만들어질 수 있는 지 확인하기 위해 문자열 뒤에 A을 한 번 추가해보고, 또 문자열을 뒤집고 B를 추가하는 연산을 각각 수행해보는 완전탐색 방식은 시간초과가 난다. S의 길이가 1이고 T의 길이가 1000인 최악의 상황을 고려했을 때, 999자리만큼 문자를 늘려야한다. 위에서 설명한 방식은 한 자리씩 늘릴 때마다 2가지 경우의 수가 존재하므로 2의 999제곱이 되어 시간초과가 발생한다. 따라서 S에서 완전탐색으로 T를 만들어나가는 과정은 적용할 수 없다. 그렇다면 반대로 T에서 S를 만들어나가면 된다. S에 1번 연산을 적용하면 맨 뒤 알파벳은 A가 되고 2번 연산을.. 2024. 4. 12.
(운영체제 / 반효경) 3-2. Process (PCB, 문맥 교환, Queue, 스케줄링, 스레드(Thread)) Process Control Block (PCB) 운영체제가 각 프로세스를 관리하기 위해 프로세스마다 해당 프로세스의 정보를 구조체로 구성해 저장하는 정보이다. 이러한 PCB를 구성하는 요소를 4가지로 나누어 살펴보자. OS가 관리상 사용하는 정보 프로세스 상태, PID(Process ID), 스케줄링 정보, Priority를 담고 있다. Priority는 Queue에 먼저 온 순서대로 처리하지 않고 스케줄링 기법마다 가진 우선순위에 대한 정보를 나타낸다. CPU 수행 관련 하드웨어 값 Program Counter와 Registers가 있다. CPU에 어떤 레지스터 값을 넣어서 실행하고 있었는지를 나타낸다. 메모리 관련 code, data, stack이 메모리의 어디에 위치해있는지에 대한 정보가 있다. .. 2024. 4. 5.