분류 전체보기
[백준-10814] 나이순 정렬 파이썬
# 문제 # 풀이 간단한 정렬 알고리즘 문제이다. 정렬에 두가지 조건이 붙는 것에 유의해야한다. 나이순으로 오름차순 정렬하면서, 나이가 같다면 먼저 들어온 것이 앞에 나오도록 해야한다. 들어온 두개의 나이와, 이름을 튜플 형식으로 리스트에 저장한다. 파이썬을 이용하면 파이썬의 sort에 key를 이용해서 쉽게 정렬 할 수 있다. 또한 기본적으로 파이썬은 stable한 정렬을 하기 때문에 순서가 뒤죽박죽 섞이지 않고 정렬 된다. 만일 나이 즉 x[0]이 같을 경우 정렬조건을 주고 싶다면, key=lambda : x:(x[0],x[1])로 키값을 주면 된다. # 코드 import sys # key값으로 정렬을 하는데, 그 외 순서에대해서는 stable속성이 적용된다. # 즉 원래 순서를 유지하면서 정렬된다...
[백준-4195] 친구 네트워크 파이썬, union-find풀이, 파이썬 set을 이용한 풀이
# 문제 # 풀이 문제의 출력을 이해하는데 꽤나 오랜 시간이 걸렸다. "두 사람의 친구 네트워크에 몇 명이 있는지"라는 말 때문이었다. 두사람이면 각각의 출력 결과(2개)가 나와야하는 것이 아닌가라는 의문에 빠졌다. 그러나 친구가 맺어지면 같은 네트워크에 속하게 된다. 그렇기 때문에 하나의 출력이 맞았다. ## 시도했던 풀이 문제를 보자말자 union-find를 사용해서 풀어야겠다는 생각이 먼저 들었다. 저번에 크루스칼 알고르짐을 풀면서 union-find를 구현했었는데 union-find는 최소신장트리 관리하기 위해서 사용했다. 각 최소신장트리의 root를 비교해보고, 다른 root라면 서로다른 최소신장트리이기때문에, 연결 시켜 줄 수 있다. 애석하게도 union-find를 굳이 구현하지 않고 파이썬의..
[코루틴#2] 코루틴 스코프(Coroutine Scope)와 잡(Job)을 이용한 join
[코루틴#1] 코루틴 시작하기, runBlocking, launch, delay, suspend # 시작하며 앱공부를 하다보니까, 아키텍처와 코루틴의 중요성을 알게 됐다. 그래서 책도사고 여러가지 공부할 방법을 고심했는데, 결국 강의하나를 질렀다. 코루틴에 대해서 셜명해주는 강의 devforyou.tistory.com # suspension point 해당 지점에서 코루틴이 잠들 수 있고, 깨어나는 지점이다. 쓰레드를 점유하지 않고 양보 할 수 있다. delay와 suspend키워드로 작성한 함수는 suspension point가 된다. 잠시 잠들었다가 돌아 올 수 있는 지점이다. # launch import kotlinx.coroutines.* suspend fun doOneTwoThree() { la..
[백준-5397] 키로거 파이썬
# 문제 # 풀이 실패한 풀이 또한 구현 과정은 맞았지만 리스트 슬라이싱을 남발하기 때문에 시간초과가 떴다. n이 1,00,000이기 때문에 상당히 큰 문자열이 들어오면 시간초과가 나는거 같았다. # 실패한 풀이 BACKE_SPACE = "-" LEFT = "" def un_solve(n): result = [] for _ in range(n): str = "" cursor = 0 logs = sys.stdin.readline().strip() q = [logs[i] for i in range(len(logs))] for log in q: if log == BACKE_SPACE: # 커서가 맨 앞일때 if cursor == 0 : continue # 커서가 맨 끝일때 elif cursor == len(s..
[백준-1966] 프린터 큐 파이썬
# 문제 # 풀이 일반적인 큐의 정책에 따라서 pop되어야 하는 원소를 기준으로 그 뒤의 원소들 중 큰 값이 있다면 큐의 맨뒤에 줄을 세우는 과정을 반복하면 된다. 그러나 출력해야하는 문서의 초기 인덱스 값인 M 큐가 계속해서 update됨에따라서 인덱스 번호가 바뀐다. 이 것을 해결하는 것이 문제를 푸는 가장 중요한 포인트라고 생각했다. M이 맨앞에오는 시점(인덱스가 0일때) 즉 출력되어야하는지 맨 뒤로 가야하는지를 결정하는 시점또한 중요 포인트다. # 실패한 풀이 def unsolve(n): result = [] for _ in range(n): cnt = 0 N,M = list(map(int, sys.stdin.readline().strip().split())) data = list(map(int,..
[백준-1874] 스택 수열 파이썬
# 문제 # 풀이 1~N까지의 숫자를 차례대로 스택에 push 또는 pop하여 수열을 만들 수 있는지 확인하는 문제였다. 주어진 수가 현재 스택에 넣어진 수가 아닌지 확인하며 주어진 수까지는 스택에 꾸준히 push시킨다. 핵심 포인트는 pop을 하는 상황인데, pop은 무조건 스택의 최상위의 숫자만 할 수 있기때문에 해당 조건을 통해서 검사해야한다. # 실패한 풀이 import sys PLUS = "+" MINUS = "-" # 실패 코드 def get_top(stack): stack_len = len(stack) if stack_len == 0: return 0 return stack[stack_len-1] def get_start(stack): if len(stack) == 0 : return 0 r..