전체 글

알고리즘(백준)/자료구조

[알고리즘/자료구조] 1158번 : 요세푸스 문제 - python

링크 : https://www.acmicpc.net/problem/1158 문제 소요시간: 18분 50초 설계하기(접근방법) 1. n과 k를 입력받는다 2. 알고리즘 해석 n = 7, k= 3일 때 앞에서부터 3번째 수를 삭제한다. 1 2 3 4 5 6 7 (3 삭제) -> 1 2 4 5 6 7 그 후 삭제한 자리에서부터 k(3)번째 수를 삭제한다. 4 5 6 7 1 2 (6 삭제) -> 4 5 7 1 2 ........ 다음과 같은 결과가 나온다. 처음에는 list로 수학적으로 구현하려고 했으나, 자료구조 문제임을 생각해서 큐,deque 를 import하여 사용하기로 했다 deque에 있는 rotate 기능을 사용하면 쉽게 문제를 풀 수 있을 것 같았다. deque.rotate(인자)의 기능? from..

알고리즘(백준)/자료구조

[알고리즘/자료구조] 18258 번 : 큐 2 - python

링크 : https://www.acmicpc.net/problem/18258 문제 소요시간: 13분 51초 설계하기(접근방법) 1. 명령의 수 n 입력받는다 2. n번 만큼 명령이 주어진다. 3. 메서드들을 파이썬의 deque 를 import해서 구현한다 -> 리스트로 구현하면 popleft를 진행할 떄 O(n)만큼의 연산으로 시간초과가 발생한다. 코드(출력) import sys from collections import deque n = int(input()) queue = deque([]) for i in range(n): command = sys.stdin.readline().split() if 'push' in command: queue.append(command[1]) # command[1]은 ..

알고리즘(백준)/자료구조

[알고리즘/자료구조] 9012번 : 괄호- python

링크 : https://www.acmicpc.net/problem/9012 문제 소요시간: 24분 41초 설계하기(접근방법) 1.테스트 케이스를 입력받는다 2. 스택을 입력받을 리스트를 선언한다 3. VPS check 메서드를 선언한다 if '('가 원소로 들어오면 리스트에 append if ')'가 원소로 들어오면 and 리스트가 비어있지 않다면 리스트에서 pop - 만약 비어있었다면 VPS가 아니므로 stack 내에 'False'를 넣어주고 break 4. 반복문에 따라 VPS를 입력받으면서 VPS_check 메서드로 검사한다 만약 False가 있다면 break 그 뒤 스택에 원소가 남아있으면 VPS가 아니므로 'NO' 출력 스택이 비어있다면 VPS 이므로 'YES'출력 그 후 다음 반복문을 위해 스..

Git 사용법

[Git 사용법] Fork(포크) 하는법, 오픈 소스 복제

현재 내 저장소에는 내가 직접 만든 저장소만 존재한다. 그렇다면 다른 사람의 오픈소스를 나의 repository로 가져오려면 어떻게 해야 할까? 이것을 위해 깃허브에는 Fork라는 기능이 있다 Fork란? 다른 사람의 Github repository에 내가 관여하고 싶을 때 연결고리를 만들어주는 기능이라고 생각하면 된다. 먼저 상대방의 오픈소스(원본 저장소)를 내 repository에 복제를 한 후, 변경/수정 혹은 삭제해야할 부분을 먼저 나의 repository에서 진행한다. 그리고 그 변경사항을 pull request를 통해 상대방의 수락 하에 원본 저장소의 내용을 변경할 수도 있다. 협업을 위한 기능이라고 생각하면 편하다. 이 오픈소스는 공부를 위해 내가 복제해오고 싶은 우와코스-프리코스의 자바 오..

알고리즘(백준)/그리디

[알고리즘/그리디] 1946 번 : 신입 사원 - python

링크 : https://www.acmicpc.net/problem/1946 문제 소요시간: 실패 설계하기(접근방법) 1. 테스트 케이스 입력받기, 지원자 수 입력받기, 지원자 리스트 입력받기 2. 알고리즘 생각하기 먼저 서류를 기준으로 오름차순 정렬한다. 그러면 1 5 2 4 3 2 4 1 5 3 과 같은 형태로 나올 것이다. 알고리즘의 핵심은, "뽑힌 사람은 그 누구보다도 서류성적과 면접성적 모두 모자라서는 안된다이다. 즉 이 정렬된 리스트에선 위에서 아래로 갈수록, 무조건 서류성적은 윗사람보다 낮으니 앞선 사람들의 면접성적보다는 높아야 선발조건에 들어간다는 것이다 첫 사람의 면접 성적을 min값으로 잡고, 그 다음사람이 min값보다 면접성적이 높다면(즉, 숫자가 더 작다면) count +=1을 하고 ..

알고리즘(백준)/자료구조

[알고리즘/자료구조] 10828번 : 스택 - python

링크 : https://www.acmicpc.net/problem/10828 문제 소요시간: 30분 36초, 처음 코드 16분 설계하기(접근방법) 1. 파이썬 리스트의 성질을 이용하여 메서드를 작성한다 2. n 을 입력받고 n만큼 order을 입력받는다 3. order에 맞는 메서드를 수행한다 코드(출력) import sys def push(array, x): return array.append(x) def pop(array): if not array: print(-1) else: print(array.pop()) return def size(array): print(len(array)) def empty(array): if not array: print(1) else: print(0) def top(a..

알고리즘(백준)/정렬

[알고리즘/정렬] 2751번 : 수 정렬하기 2 - python

링크 : https://www.acmicpc.net/problem/2751 문제 소요시간: 6분 20초 설계하기(접근방법) 1. 문제 파악 데이터의 총 개수가 100만개이니 O(n^2)의 정렬을 사용하면 시간이 초과될 것이다. 따라서 O(logN)의 시간복잡도를 사용해야 한다. -> 퀵 정렬을 사용해보자 -> 퀵정렬의 경우 최악의 경우 O(n^2)의 시간복잡도를 가진다 따라서 파이썬의 내장함수를 이용했다 코드(출력) import sys input=sys.stdin.readline n=int(input()) array=[] for i in range(n): array.append(int(input())) for i in sorted(array): print(i) 얻어갈 부분 1. 퀵 정렬에 대해서 익숙해졌..

알고리즘(백준)/구현

[알고리즘/구현] 2578번 : 빙고 - python

링크 : https://www.acmicpc.net/problem/2578 문제 소요시간: 실패 후 성공 설계하기(접근방법) 1. 이중배열로 빙고와 사회자가 부르는 번호 리스트를 입력받는다. 2. 사회자가 부른 번호를 빙고번호에서 찾은 후, 'None'값으로 대체한다. 3. 빙고의 갯수를 검사하는 메서드를 매 횟수마다 돌려 빙고의 갯수가 3이상이면 현재 회차를 출력하고 종료한다. 코드(출력) def checkBingo(array): bingo_cnt = 0 for i in range(5): if (array[i][0] == array[i][1] == array[i][2] == array[i][3] == array[i][4] == 'None'): bingo_cnt += 1 for j in range(5):..

되다
코드테일