본문 바로가기

전체 글150

자주 잊는 코딩테스트 문법 0. 기본 # 1. 나누기를 조심하자!!!!나누기하면 float으로 나온다 print(4/2) # 2.0 print(4/2) # 2.5 # 컴퓨터는 2진수 체계이기 때문에 실수 덧셈을 정확히 하지 못한다. 보통 5째 자리에서 반올림 하면된다. a = 0.3 + 0.6 print(round(a,4)) # Java에서 다음과 같은 코드는 ch 에 'b'를 저장한다. # 하지만 파이썬은 문자를 아스키코드를 나타내는 int형으로 변환하고 연산한 뒤 다시 char형으로 형변환 해주어야 한다. char ch = 'a'+1; # 자바 ch = chr(ord('a')+1) # 파이썬 # 입력 import sys input = sys.stdin.readline # N개의 정수를 한 줄로 입력 받았을 경우 N, M, K .. 2023. 1. 29.
Union Find 서로소 집합 알고리즘 1. 서로소 집합이란 예를들어 집합 {1,2} 와 {2, 3}은 서로소 가 아니지만 {1, 2}, {3, 4}는 서로소 집합이다. 서로소 집합 자료구조란 서로소 부분 집합들로 나누어진 원소들의 데이터를 처리하기 위한 자료구조이다. 서로소 집합 자료구조는 union과 find 2개의 연산으로 조작할 수 있다. union연산은 2개의 원소가 포함된 집합을 하나의 집합으로 합치는 연산이다. find 연산은 특정한 원소가 속한 집합이 어떤 집한 인지 알려주는 연산이다. 예를 들어 {1, 2, 3 ,4, 5, 6} 에서 서로소 부분 집합이 다음과 같이 주어진다고 가정하자 {1, 4} , {2, 3}, {2, 4}, {5, 6} 이와 같이 주어진 서로소 부분집합들은 각각 동일한 서로소 집합에 포함되어 있는 원소들이.. 2023. 1. 28.
(그리디) 크루스칼 알고리즘 1. 최소 신장을 찾는 크루스칼 알고리즘 신장트리란 하나의 그래프가 있을 때, 모든 노드를 포함하면서 즉, 모든 노드들 간에 서로 연결은 되어 있되 사이클이 존재하지 않는 "부분"그래프를 의미한다. 예를 들어 다음과 같은 그래프G가 있을 때, 이때 그래프에서 가능한 신장 트리는 다음과 같다. 즉, A, B, C 노드들 간에 서로 연결은 되어 있되, 자기 자신으로 돌아오는 산선이 있는 사이클이 존재해서는 안된다. 이럴때 우리는 신장 트리라 한다. 신장 트리들은 원본 그래프 G의 '부분' 그래프임을 잊지 말자. 2. 왜 최소 신장을 찾을때 크루스칼 알고리즘을 사용할까? 아래와 같이 있다고 가정해 보자 위 그림을 보면 원본 그래프에서 나올 수 있는 신장 트리는 2가지 이다. 파란색, 빨간색 점으로 이루어진 그.. 2023. 1. 28.
문자열 문자열에 숫자로만 이루어졌는지 확인 +,- 부호나 소수점은 False로만 나온다 (구분 못함) print('1234'.isdigit())# True print('abc1234'.isdigit())# False 문자열 대소문자 변경 - 문자열.upper() - 해당 문자열을 대문자로 변환 - 문자열.lower() - 해당 문자열을 소문자로 변환 - 문자열.isupper() - 해당 문자열이 전부 대문자인지 판단 - 문자열.islower() - 해당 문자열이 전부 소문자인지 판단 str1 = 'ponyozzang' print(str1.isupper()) #PONYOZZANG str2 = 'PonyoZzang' print(str2.isupper()) #False str3 = 'PONYOZZANG' print(.. 2023. 1. 25.
다익스트라 다익스트라 알고리즘은 source node로 부터 모든 node까지의 최단거리를 구하는 알고리즘이다. 다익스트라 알고리즘을 알기 위해서는 먼저 heapq부터 알고 해야 한다. 그전에 heapq의 특징을 알고가면 좋다. [heapq] 완전 이진 트리 형태 부모 노드 키값이 자식 노드 키값보다 항상 작다(최소힙) 키값의 대소관계는 부모/자식 관계에서만 성립하고, 자식끼리의 대소관계는 없다 다익스트라 알고리즘 1. node가 숫자일때 1916번: 최소비용 구하기 첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 www.acmicpc.net.. 2023. 1. 20.
정렬 파이썬으로 문제를 풀다보면, 여러 조건으로 소팅을 해야하는 경우가 있다. 일반적인 소팅은 다음과 같이 sorted() 혹은 .sort() 를 사용한다. a = [4,1,2,5,7,3,6] b = sorted(a) # b = [1,2,3,4,5,6,7] sorted() 를 찬찬히 살펴보면 다음과 같다. a = [(1, 2), (0, 1), (5, 1), (5, 2), (3, 0)] # 인자없이 그냥 sorted()만 쓰면, 리스트 아이템의 각 요소 순서대로 정렬을 한다. b = sorted(a) # b = [(0, 1), (1, 2), (3, 0), (5, 1), (5, 2)] # key 인자에 함수를 넘겨주면 해당 함수의 반환값을 비교하여 순서대로 정렬한다. c = sorted(a, key = lambd.. 2023. 1. 20.
완전 탐색 에라토스테네스의 체 n=1000 primes=list(range(n+1)) primes[1] = 0 for i in range(2,int((n+1)**0.5)): if primes[i] != 0: for j in range(2*i, n+1, i): primes[i] = 0 + 추가적으로 그냥 반목문에 의해 소수 구하기 def sol1(n): for i in range(2, int(n**0.5)+1): if n % i == 0: return False return True number = 100 print(sol1(number)) 백트랙킹 아래의 문제들은 파이썬 라이브러리를 사용하면 간단히 풀수 있지만 백트랙킹을 이해하는데 좋은 문제들이다. 결과값의 순서를 보고 코드의 차이점을 머리속으로 생각을 해보자! .. 2023. 1. 18.
dfs bfs 문제로 보는 정리 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 1. BFS & DFS 설계 (인접 리스트) from collections import deque n, m, v = map(int, input().split(" ")) visit = [False] * (n + 1) arr = [[] for i in range(n + 1)] for i in range(m): a, b = map(int, input().split(" ")) arr[a].append(b) arr[.. 2023. 1. 14.
코딩 테스트 파이썬 문법 (중간편) 코딩테스트를 준비하며 반드시 알아야 하는 라이브러리 6가지 내장 함수 print(), input()과 같은 기본 입출력 기능부터 sorted()와 같은 정렬 기능을 포함하고 있는 내장 라이브러리 itertools 파이썬에서 반복되는 형태의 데이터를 처리하는 기능을 제공하는 라이브러리, 순열과 조합 라이브러리를 제공 heapq 힙(Heap) 기능을 제공하는 라이브러리. 우선순위 큐 기능을 구현하기 위해 사용한다. bisect 이진탐색/이분탐색(Binary Search) 기능을 제공하는 라이브러리 Collections 덱(deque), 카운터(Counter) 등의 유용한 자료구조를 포함하고 있는 라이브러리 math 필수적인 수학적 기능을 제공하는 라이브러리 팩토리얼, 제곱급, 최대공약수(GCD), 삼각함수,.. 2023. 1. 12.
코딩테스트 파이썬 문법 (기초편) 자료형 #소수부가 0일 때 0을 생략 a = 5. # 5.0 # 10억의 지수 표현 방식 (최단 경로문제에서 자주 사용) a = 2e+9+1 # 컴퓨터는 2진수 체계이기 때문에 실수 덧셈을 정확히 하지 못한다. 보통 5째 자리에서 반올림 하면된다. a = 0.3 + 0.6 print(rount(a,4)) 수 자료형의 연산 a = 7 b = 3 # 나누기 a / b # 나머지 a % b # 몫 a // b # 거듭 연산자 a ** b # a의 b승 자료형 변환 # 문자열을 한 글자씩 분리하여 리스트에 저장 str = 'Hello world!' list = list(str) ['H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!'] # Java에서 다음과 같.. 2023. 1. 12.
코딩테스트 준비 (By Python...) 나는 작년 코딩테스트 준비를 위해 정말 오랜 시간동안 JAVA로 준비하였다. 구글링을 했을때 주력언어를 코딩테스트에 사용하라는 말을 보고 Kotlin은 코테 자료가 너무 안나오고 그럴바엔 그냥 JAVA로 준비하자는 마음이였다 그런데 너무 오래 걸렸고 지금 Python을 추천받아 자료를 보니 진짜.......주력언어로 하라는 사람들 진짜 뭐지..... 아님 그사람들은 타자가 미친 사람들인가.....?? 예를 들면 순열,조합,리스트,다익스트라 등등 함수 하나 만들고 진빠지는 것들을 어떻게 시간안에 만들라는거야... 난 그냥 코딩테스트는 Python이라고 결심했다.(나는 왜이리 이상한 선택을 하고야 만걸까.....) 어쨌든 돌아 와서 나의 공부 방법에 대해 작성해 보려고 한다. 1. 구글링을 통해 코테용 파이.. 2023. 1. 10.
app:cardCornerRadius 오류 개발 도중 옛날폰(구글 폰인데 진짜 옛날폰이였음..)에서 갑자기 머더리얼 디자인이 나오지 않았다.... 이유는 app:cardCornerRadius 는 height의 1/2 로 써줘야 (height가 21dp 니깐 11dp or 10dp) 원하시는 원형이 나온다. 1/2이 넘어갈경우 옛날 폰에서 이상현상이 생기는 오류가 있었다!!! 2023. 1. 2.
커스텀 뷰 만들어보자 안드로이드 시스템은 XML에 정의된 View 태그와 속성을 기반으로 생성된 View 객체와 AttributeSet 객체를 이용해 화면에 View 를 그려준다. 좀더 풀어 쓰면, 레이아웃 XML에 정의된 모든 View 들은 화면에 출력 될 시점에 안드로이드에 의해 View 객체로 변환되어 메모리에 올라가며, 이 때, 각 뷰의 내부 속성(색상, 크기 등)은 AttributeSet 객체로 변환되어 View 클래스 생성자의 매개변수로 전달 된다. 이렇게 생성된 View객체를 안드로이드가 해석하여 화면에 그려준다. 참고로 XML 에 정의된 View 를 객체로 생성해 메모리에 올리는 과정을 Inflate 라고 한다. 해당 뷰 하단의 버튼들을 보면 모두 같은 레이아웃에 아이콘과 텍스트만 다르다는 것을 볼 수 있다. .. 2022. 12. 30.
StateFlow<MutableList<Object>> 에 추가, 삭제 하는 법 stateflow의 value를 바꿔본 적은 있지만 한개씩 추가해본적은 없었는데 아래와 같은 방법을 사용하자!! 예시로 private val _editerChattingList = MutableStateFlow(mutableListOf()) val editerChattingList: StateFlow get() = _editerChattingList 위와 같이 있을 경우 fun onEditerChattingList(item: CHAT_LIST_ITEM) { _editerChattingList.value = _editerChattingList.value.toMutableList().also { list -> if (list.contains(item)) list.remove(item) else list.ad.. 2022. 12. 16.
안드로이드 리플렉션 이슈 안드로이드 개념을 공부하던 중 직렬화라는 개념에 대해서 공부를 했다. 직렬화란 메모리에 올라가 있는 정보를 byte 단위의 코드로 나열하는 것이다. 이를 통해서 객체와 같은 정보를 전달할 수 있게 하는 것이다. 직렬화를 가능하게 하는 방법 중에는 Serializable과 Parcelable을 구현하는 2가지 방법이 존재한다. 그 중 Serializable은 구현은 상당히 쉬우나 속도가 느리다는 단점이 있다. 속도가 느린 이유는 내부적으로 Reflection을 사용하기 때문에 필요없는 쓰레기 객체들을 만들어내고 이를 제거하기 위해 GC가 동작해서 비용이 발생하게 된다. 그렇다면 여기서 말하는 Reflection은 무엇일까?? Reflection 객체를 통해 클래스의 정보를 분석해 내는 프로그래밍 기법을 말.. 2022. 12. 10.