정의 유클리드 호제법(유클리드 알고리즘)은 최대공약수 (GCD : Greatest Common Divisor)를 구하는 알고리즘이다. 다른 두 수를 각각 A, B (단 A > B), A를 B로 나눈 나머지를 r 이라고 가정할때 A와 B의 최대공약수는 B와 r의 최대 공약수와 같다. 즉 GCD(A,B) = GCD(B,r) = GCD(A, A%B) 코드 반복문 구현 int gcd(int a, int b) { int tmp; while (b > 0) { tmp = a % b; a = b; b = tmp; } return tmp; } 재귀 구현 int gcd(long long int a, long long int b) { if (b == 0) return a; else return gcd(b, a % b); }..
1. 해시맵이란? 인덱스 대신에 Key값을 통해서 배열에 접근 할 수 있게 해주는 자료구조이다. Key - Value 쌍으로 구성되어있으며 Key를 Hash Function을 통해서 인덱스화하고 이를 기반으로 값을 저장해준다. 만약 우리가 100만명의 유저의 전화번호 데이터를 가지는 테이블이 있다고 가정해보자. 이 100만명의 사람들중 특정 유저의전화번호 정보를 수정해야 하는 일이 발생한다면 이사람의 정보를 수정하기 위해서는 먼저 100만개의 테이블에서 내가 수정하고자 하는 유저의 정보가 테이블의 몇번째 인덱스에 있는지 부터 찾아야 할것이다. 그러면 처음부터 끝까지 내가 원하는 유저를 찾을떄까지 탐색을 진행해야하고, 최악의 경우 100만번의 연산이 필요하게된다. 이는 굉장히 비효율적이고 오랜 시간이 걸리..
1. 이진탐색이란? 이진탐색(Binary Search)은 처음부터 끝까지 모든 케이스를 탐색하는 일반적인 선형탐색(Linear Search)와 달리 데이터의 배열의 중간값을 확인해보고 해당값보다 크거나 작은 경우를 체크해가며 탐색해야하는 데이터를 반씩 줄여나가는 탐색방법이다. 만약 n개의 데이터가 들어있는 배열 arr[n] 이 있다고 가정하면, 일반적인 선형탐색의 경우 처음부터 모든 데이터를 확인해봐야하기 떄문에 데이터를 탐색하는데 O(n)이 걸리게된다. 만약 탐색해야하는 데이터가 n개이고 찾아야 하는 데이터 또한 n개라고 가정해보면 O(n) 탐색을 총 n번 해야하므로 O(n^2)의 시간이 걸리게된다. 2. 설명 데이터를 탐색해야하는 다음과 같은 배열이 있다고 가정하자. arr = [1, 2, 3, 4,..
1.문제 2.풀이 에라토스테네스 체를 이용해서 문제를 풀었다. 에라토스네테스의 체는 소수를 구하는 알고리즘으로 이중포문을돌려 특정 숫자를 해당 숫자 이하의 모든숫자로 나누는(좀더 시간을 줄이려면 제곱근 이하의 숫자로 나누면됨) 경우보다 훨씬 적은 시간에 소수들을 찾아 낼 수 있다. 원리는 n의 배수에 해당하는 숫자를 하나씩 지워나가고 만약 이미 지운숫자면 넘어가는 방식을 계속해서 반복해 결국 소수들만 남게 하는 방법이다.
1.문제 2.풀이 정렬 알고리즘 중 삽입정렬을 활용해 문제를 풀었다. 삽입정렬은 우리가 무작위의 카드를 다시 정렬하는 방법과 같다. 1번인덱스가 0번 인덱스보다 작다면 왼쪽 아니면 그대로 2번인덱스가 1번인덱스보다작다면 왼쪽 아니면 그대로 2.1 2번인덱스가 1번인덱스보다 작고 0번보다 작다면 왼쪽 아니면그대로 i번째 까지 반복 코드를 살펴보면 while문 안에서 현재 i인덱스의 값이 i이하의 인덱스보다 작다면 계속해서 왼쪽으로 이동한다. 이동할때 현재 인덱스의 값이 들어갈 공간을 만들어 줘야하므로 인덱스를 옆으로 한칸씩 밀어주면서 위치를 잡는다. 만약 i인덱스의 값보다 i이하의 인덱스의 값이 큰경우가 나온다면 현재 가리키고 있는 위치가 i인덱스가 들어갈 위치이다
1.문제 2.풀이 육각형의 테두리가 한칸씩 늘어날 때 마다 거쳐야하는 횟수도 한개씩 증가한다는 점에 착안 해서 문제를 풀었다. 예를 들어 두번째 테두리인 2~7은 두번 세번째 테두리인 8~19는 세번 거쳐야 찾을수 있다. 이때, 각 테두리의 시작숫자는 이전 테두리 시작숫자에서 6, 12 18순으로 커지고, 각 테두리의 마지막 숫자는 12,18,24순으로 커지는 규칙을 발견했다. 3.배운점 if문으로 조건을 걸 때 if(2
DefaultLayout 프로젝트 규모가 커지다보면 수많은 페이지들과 스크린들이 만들어진다. 만약 모든 스크린들에 공통적으로 적용하고싶은 무언가가 생긴다면 일일이 모든 스크린들에 들어가 코드를 수정,추가 해주어야하는 번거로움이 생긴다. import 'package:flutter/material.dart'; class DefaultLayout extends StatelessWidget { final Widget child; const DefaultLayout({ required this.child, Key? key, }) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( body: child, ); } } 따..
Token & Session Session : 유저의 정보를 DB에 저장하고 상태를 유지하는 도구 특수한 ID값으로 구성 → 어떤 유저인지 표현 해줌(특정 유저와 연동) 서버에서 생성 → 클라이언트에서 쿠키로 저장 클라이언트에서 요청을 보낼때 Session ID를 같이 보내면 현재 요청을 보내는 사용자가 누구인지 서버에서 알 수 있다(ID값은 유저와 연동된 고유한 Key값이므로) → 따라서 요청시마다 매번 아이디와 비밀번호를 물어볼 필요가 없다 서버에서 데이터가 저장되므로 클라이언트의 사용자 정보가 노출될 위험이 없다(장점) → 만약 노출이 되더라도 ID자체는 랜덤한 String값일뿐 DB와 대조하지 못한다면 아무런 의미가 없으므로 설령 ID값이 노출이 되더라도 상관이 없다 Session ID는 DB에 ..
초반 세팅 플러그인 설치 https://pub.dev/packages/google_maps_flutter https://pub.dev/packages/geolocator : 위치 관련된 작업에사용 (ex 현재 위도 경도, 거리) - android : android/app/src/main/AndroidManifest 비교적 덜 정확한 위치 가져옴 (추가할 필요 X) -> 백그라운드에서 앱 구동 가능하게 함 (현 프로젝트에서는 필요 없는 기능) 인터넷 권한도 추가 -> (개발환경에서는 안해도 되지만 출시할 경우 해줘야함) - ios : ios/Runner/info.plist 안에 추가 NSLocationWhenInUseUsageDescription This app needs access to location..
Future 지금 당장 특별한 데이터를 가지지는 않지만 미래에 어떤 타입의 데이터가 들어올것을 약속해주는 변수 예를들어 우리가 햄버거를 주문한다면 지금당장 햄버거를 가지고 있지는 않지만 주문 영수증을 통해 미래에 햄버거를 받게 된다는 것을 약속 할 수 있다. Future또한 이와 마찬가지로 제네릭으로 선언한 타입의 데이터를 미래에 받을것임을 약속하는것 비동기 작업을 할 떄 사용 일정 소요 시간 이후에 적절한 데이터나 에러를 반환 Await synchronous(동기) 데이터의 요청과 결과가 한 자리에서 동시에 일어나는것 요청을 하면 시간이 얼마나 걸리던 무조건 요청한 자리에서 결과가 주어져야한다. A라는 일의 요청이 들어오면 해당 요청이 끝날 때 까지 다른 일을 할 수 없기 떄문에 B라는 요청을 처리 하..