전체 글

전체 글

    [백준-1427] 소트 인사이드 파이썬

    [백준-1427] 소트 인사이드 파이썬

    # 문제 # 풀이 ## 첫번째 풀이 def solve(): N = input() list = [] for i in range(len(N)): list.append(N[i]) list.sort(reverse=True) for i in list: print(i,end="") 최대 10의자리수까지 들어오기 때문에 메모리나 시간을 딱히 신경쓸 필요가 없다. 문자열 인덱싱을 통해 각각의 문자열을 리스트에 저장시킨후 파이썬 정렬 라이브러리를 사용해서 정렬시킨다. ## 두번째 풀이 def solve2(): N = input() for i in range(9,-1,-1): for j in N: if i == int(j): print(i,end="") 각자리는 0~9까지의 숫자중 한개이고, 내림차순 정렬 즉, 큰 수부터..

    [백준-10814] 나이순 정렬 파이썬

    [백준-10814] 나이순 정렬 파이썬

    # 문제 # 풀이 간단한 정렬 알고리즘 문제이다. 정렬에 두가지 조건이 붙는 것에 유의해야한다. 나이순으로 오름차순 정렬하면서, 나이가 같다면 먼저 들어온 것이 앞에 나오도록 해야한다. 들어온 두개의 나이와, 이름을 튜플 형식으로 리스트에 저장한다. 파이썬을 이용하면 파이썬의 sort에 key를 이용해서 쉽게 정렬 할 수 있다. 또한 기본적으로 파이썬은 stable한 정렬을 하기 때문에 순서가 뒤죽박죽 섞이지 않고 정렬 된다. 만일 나이 즉 x[0]이 같을 경우 정렬조건을 주고 싶다면, key=lambda : x:(x[0],x[1])로 키값을 주면 된다. # 코드 import sys # key값으로 정렬을 하는데, 그 외 순서에대해서는 stable속성이 적용된다. # 즉 원래 순서를 유지하면서 정렬된다...

    [백준-4195] 친구 네트워크 파이썬, union-find풀이, 파이썬 set을 이용한 풀이

    [백준-4195] 친구 네트워크 파이썬, union-find풀이, 파이썬 set을 이용한 풀이

    # 문제 # 풀이 문제의 출력을 이해하는데 꽤나 오랜 시간이 걸렸다. "두 사람의 친구 네트워크에 몇 명이 있는지"라는 말 때문이었다. 두사람이면 각각의 출력 결과(2개)가 나와야하는 것이 아닌가라는 의문에 빠졌다. 그러나 친구가 맺어지면 같은 네트워크에 속하게 된다. 그렇기 때문에 하나의 출력이 맞았다. ## 시도했던 풀이 문제를 보자말자 union-find를 사용해서 풀어야겠다는 생각이 먼저 들었다. 저번에 크루스칼 알고르짐을 풀면서 union-find를 구현했었는데 union-find는 최소신장트리 관리하기 위해서 사용했다. 각 최소신장트리의 root를 비교해보고, 다른 root라면 서로다른 최소신장트리이기때문에, 연결 시켜 줄 수 있다. 애석하게도 union-find를 굳이 구현하지 않고 파이썬의..

    [코루틴#2] 코루틴 스코프(Coroutine Scope)와 잡(Job)을 이용한 join

    [코루틴#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] 키로거 파이썬

    [백준-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..