분류 전체보기 54

[알고리즘] Dynamic Programming

다이나믹 프로그래밍? 메모리를 적절히 사용하여 수행 시간 효율성을 비약적으로 향상시키는 방법. 이미 계산된 결과(작은 문제)는 별도의 메모리 영역에 저장. 1. 탑 다운 하향식 2. 보텀 업 상향식 1. 최적 부분 구조 : 큰 문제를 작은 문제로 나눌 수 있음 2. 중복되는 부분 : 동일한 작은 문제를 반복적으로 해결. 피보나치 수열? 1, 1, 2, 3, 4, 8, ,13..... 점화식? 인접한 형들 사이의 관계식을 의미 배열 = 시퀀스 이러한 수열을 배열이나 리스트를 이용해 표현합니다. ➡️ 단순 재귀 소스코드 ‼️ 지수 시간 복잡도를 가지게 된다. 중복되는 부분 문제 def fibo(x): if x ==1 or x == 2: return 1 return fibo(x-1) + fibo(x-2) pr..

[Android] 코틀린의 enum class & Sealed class

enum class : 상수를 열거하기 위해서 쓰이며 상수를 집합으로 관리할 수 있어 코드의 가독성 높아짐. enum class State { IDLE, RUNNING, FINISHED } fun main() { val state = State.RUNNING val message =when (State) { State.IDLE -> " idle" State.RUNNING -> "running" State.FINISHED -> "finished" } println(message) } sealed class : super class를 상속받는 child클래스의 종류 제한하는 특성을 가지고 있는 클래스 - 다음과 같이 중첩 클래스로 정의할 수도 있음. 상위 클래스 아래에 하위 클래스들이 위치하도록 선언. - ..

안드로이드 2021.10.07

[Android] Kotlin 코루틴 사용

코루틴? Kotlin 코루틴은 비동기 코드를 작성할 수 있게하는 API를 제공. 단일 쓰레드 내에서 여러 개의 코루틴을 실행할 수 있기 때문에, 많은 양의 동시 작업을 처리. 메모리 절약의 장점이 있다. 코루틴은 쓰레드가 아닌 루티늘 일시 중단(suspend) 하는 방식. jetpack 라이브러리(ACC)에서는 코루틴을 쉽게 사용할 수 있도록 각 lifecycle에 맞는 scope를 제공. viewmodelscope: viewmodel 대상, viewmodel이 제거되면 코루틴 작업 자동 취소 class MyViewModel: ViewModel() { init { viewModelScope.launch { // Coroutine that will be canceled when the ViewModel i..

안드로이드 2021.10.07

파이썬 코테 알아두면 좋은 기본지식‼️

파이썬 코딩테스트를 위한 기초지식 1. 문자열 출력 방법 문자열 포매팅이란 문자열 중간 중간에 특정 변수의 값을 사용자가 원하는 대로 넣어주기 위해서 사용하는 것. ➡️format 함수 '{인덱스0} , {인덱스1}'.format(값0,값1) 문자열안에 중괄호를 이용해서 넣어줄 것들을 표기함. (이때 인덱스 0부터 시작함) 그리고 format() 함수 인자안에는 순서대로 변수들을 넣어줌. print('name:{0}'.format('nayoung')) name= nayoung print('name:{0}'.format(name)) print('name:{name}'.format(name='nayoung')) ➡️ f-string 함수 f'{변수}' - 문자열앞에 f를 써주고 중괄호 안에 직접 변수 이름을..

파이썬 2021.09.28

[Python] 백준 2959 "거북이_sort" 문제풀이

import sys a,b,c,d=map(int,sys.stdin.readline().split()) list=[a,b,c,d] #list.sort(reverse=True) list=sorted(list,reverse=True) print(list[1]*list[-1]) 문제풀이 제일 큰 직사각형을 만드는 공식은 (두번째로 큰 수*제일 작은 수) 이다. 주어진 길이를 내림차순으로 정렬하여 계산한다. 피드백 sort() - 리스트가 가지고 있는 메소드. 리스트를 정렬된 상태로 변경한다. sorted() - 파이썬 내장함수. iterable 객체로부터 정렬된 리스트를 생성한다.

[Python] 백준 10162 "전자레인지_greedy" 문제풀이

import sys food=int(sys.stdin.readline()) time=[300,60,10] time=sorted(time,reverse=True)#내림차순으로 정렬 if food%time[-1] !=0: print(-1) else: for i in time: print('%d' %(food//i)) if food >=i: food -= i 문제풀이 냉동음식 조리시간을 입력받은 후 정해진 조리 시간을 큰 시간부터 나누어 몫을 저장한다. 피드백 정해진 조리시간을 time 배열에 저장하여 사용했는데 다른 코드들을 살펴보니 바로 사용하여 문제를 해결했다.

[Python] 백준 2720 "세탁소사장동혁_greedy" 문제풀이

import sys test_num=int(sys.stdin.readline()) #테스트 케이스의 개수를 입력받음 test=[] for _ in range(test_num): test.append(int(sys.stdin.readline())) for i in test: result = i//25 i -= 25*result result1 = (i%25)//10 i -= 10*result1 result2 = ((i%25)%10)//5 i -= 5*result2 result3 = (((i%25)%10)%5)//1 i -= result3 print(result,result1,result2,result3) 문제풀이 거스름돈의 액수를 받으면 제일 비싼 동전부터 나누어 계산해준다. (25,10,5,1,,,, 의 ..

[Python] 백준 15829 "Hashing_해싱" 문제풀이

import sys L = int(sys.stdin.readline()) n = sys.stdin.readline().rstrip() result=0 for i in range(L): result+=(ord(n[i])-96)*31**i print(result %1234567891) 문제풀이 첫 줄에는 문자열의 길이를 받고 둘째줄에는 소문자 문자열을 입력받는다. ord('a')=97이기 때문에 -96을 해준뒤 r^i 값을 곱해준다. 마지막에 1234567891을 나눈뒤 출력해주면 끝. 피드백 문자열에 대한 문제였다. 파이썬의 ord() 내장함수가 핵심이었다.

[Python] 백준 2231 "분해합_완전탐색" 문제풀이

import sys #분해합 구하는 함수 def deSum(n): num=str(n) s=n for i in range(len(num)): s=s+int(num[i]) return s # 생성자 구하는 함수 def deCon(m): for i in range(m): if m ==deSum(i): return i N=int(sys.stdin.readline()) print(deCon(N)) 문제풀이 먼저 분해합을 구하는 함수를 구현했다. 자릿수를 알기위해 str로 변환해주고 각각 자리값들을 다 더해준다. 그다음은 생성자 함수를 만들어줬다. 0부터 비교하여 분해합 결과와 같을 때 값을 반환해 주었다. 피드백 처음에 분해합이라는 개념이 잘 이해가 안가서 문제풀기가 어려웠다.