목록전체 글 (167)
JiSoo's Devlog
dart의 거의 전부가 object로 이루어져 있다 -> 진정한 객체 지향 언어로 불리는 이유 num 자료형을 사용하면 그 숫자는 integer일 수도 있고 double일 수도 있다 모든 게 object, class로 이루어져 있기 때문에 실제로 자료형 안에 어떤 게 들어있는지 볼 수 있다 void main(){ String name = "jisoo"; bool alive = true; int age = 12; double money = 24.22; num x = 12; x = 1.1; } dart에서 num은 정수와 부동 소수점 숫자를 모두 나타내는 데이터 타입 List를 선언하는 두 가지 방법 void main(){ var numbers = [1, 2, 3, 4]; List num = [2, 3, 4..
Dart는 두 개의 컴파일러를 가지고 있다 Dart Web(dart로 쓴 코드를 JavaScript로 변환) / Dart Native(dart 코드를 여러 CPU의 아키텍처에 맞게 변환) JIT(Just-It-Time) 컴파일 : dart VM으로 내가 쓴 코드의 결과를 바로 화면에 보여준다 AOT(Ahead-Of-Time) 컴파일 : 컴파일을 먼저 하고 그 결과인 바이너리 배포 -> 빠른 피드백을 원하면서도 최종 앱은 컴파일되어서 빨라야 한다 null safety는 안전한 프로그램을 빌드할 때 중요 dart언어를 수정해 flutter를 더 빠르게 할 수 있다 flutter에서 모든 건 class이다 main 함수는 모든 Dart 프로그램의 Entry point 이기 때문에 아주 중요 반드시 main 함..
n, m = map(int, input().split()) a = set() b = set() for i in range(n): a.add(input()) for i in range(m): b.add(input()) r = sorted(list(a & b)) # 교집합 print(len(r)) for i in r: print(i) set을 이용해 각 집합에 듣도 못한 사람의 명단과 보도 못한 사람의 명단을 add를 이용해 저장 교집합 &를 사용해 중복되는 문자열을 선택하고 sorted로 사전식으로 정렬한다
import sys n = int(sys.stdin.readline()) a = set() for i in range(n): k = sys.stdin.readline().strip().split() if k[0] == 'add': a.add(int(k[1])) elif k[0] == 'remove': a.discard(int(k[1])) elif k[0] == 'check': if int(k[1]) in a: print(1) else: print(0) elif k[0] == 'toggle': if int(k[1]) in a: a.discard(int(k[1])) else: a.add(int(k[1])) elif k[0] == 'all': a = set([i for i in range(1, 21)]) el..
n, m, v = map(int, input().split()) g = [[0] * (n+1) for i in range(n+1)] for i in range(m): a, b = map(int, input().split()) g[a][b] = g[b][a] = 1 visit = [0] * (n+1) def dfs(v): visit[v] = 1 # 방문한 점 1 print(v, end=" ") for i in range(1, n+1): if (visit[i]==0) and (g[v][i]==1): dfs(i) def bfs(v): q = [v] visit[v] = 0 # 방문한 점 0 while q: v = q.pop(0) print(v, end=" ") for i in range(1, n+1): if (..
n = int(input()) def sm(num): if num == 1: return 1 elif num == 2: return 2 elif num == 3: return 4 else: return sm(num-1) + sm(num-2) + sm(num-3) for i in range(n): num = int(input()) print(sm(num)) DP문제 1 - (1) - 1개 2 - (1+1), (2) - 2개 3 - (1+1+1), (1+2), (2+1), (3) - 4개 4 - (1+1+1+1), (1+1+2), (1+2+1), (1+3), (2+1+1), (2+2), (3+1) - 7개 5 - (1+1+1+1+1), (1+1+1+2), (1+1+2+1), (1+1+3), (1+2+1+1)..
n = int(input()) a = [0] * (n+1) # n만큼 초기화 for i in range(2, n+1): # 1은 횟수가 0이니까 2부터 탐색 a[i] = a[i-1] + 1 # 기본 값으로 이전 항의 연산 횟수 + 1 if i % 2 == 0: a[i] = min(a[i], a[i//2] + 1) if i % 3 == 0: a[i] = min(a[i], a[i//3] + 1) # 미리 저장해 둔 값과 몫+1 한 값 중 더 작은 값 print(a[n]) DP문제로 작은 문제의 결괏값을 큰 문제에서도 활용하기 다이나믹 프로그래밍은 두 가지 방식이 있는데 보통 상향식 방식을 이용했을 때 성능이 좋다 상향식 방식은 메모이제이션 기법 활용 - 한 번 연산을 통한 결괏값을 메모리에 저장해 두고 같은..
n, k = map(int, input().split()) a = [] c = 0 for i in range(n): a.append(int(input())) a.sort(reverse=True) for j in a: c += k // j k = k % j print(c) 오름차순으로 입력받지만 동전의 최소 개수를 구해야 하기 때문에 큰 수부터 계산해줘야 해서 sort로 역순 정렬 정렬된 리스트 안에서 반복문으로 몫을 더해주고 나머지 구해서 반복
n, m, B = map(int, input().split()) g = [list(map(int, input().split())) for i in range(n)] mt = 9999999999 h = 0 for i in range(257): bottom = 0 top = 0 for j in range(n): #가로 for k in range(m): #세로 if g[j][k] >= i: #블럭이 현재 높이보다 크면 top += g[j][k] - i else: bottom += i - g[j][k] if bottom > top + B: continue t = bottom + (top*2) if t = i라면 흙을 파서 높이 맞춰주고 땅을 판 횟수를 top에 저장 땅[x][y] < i라면 흙을 쌓아 높이 맞춰..