전체 글 607

[Flutter] null check 하는 법 & Android 앱으로 발행하기

null check 하는 법 & Android 앱으로 발행하기 Build 하기 전 체크 사항 Type check 변수, 함수를 만들 시 타입 체크를 했는지 null check 아래의 두 가지를 이용해서 확인 후 null 의 경우 다른 값을 보여주도록 하기 삼항연산자 Text(person[i].givenName == null ? '무명': person[i].givenName) 그런데 Dart 자체에서 null의 경우엔 삼항연산자 보다는 ??를 사용하기를 원하는 듯 ?? Text(person[i].givenName ?? ‘무명’) 이렇게 Type과 Null 체크를 다 했다면 Build 하기! Project Structure 버튼을 찾아 클릭하기! 나는 안보여서 단축키로 접근 Ctrl + Alt + Shift..

Flutter 2023.08.07

[Flutter] 휴대폰에 저장된 연락처 가져오는 법 & 타입 시스템

폰에 저장된 연락처 몰래 가져오는 법 & 타입시스템 연락처를 꺼내는 방법으로는 패키지를 하나 설치해야 함 pubspec.yaml에서 contacts_service를 설치하기! 물론 버전은 다를 수 있지만 contacts_service: ^0.6.3 작성 후 전구에서 pub get을 해주기 dependencies: flutter: sdk: flutter permission_handler: ^8.3.0 contacts_service: ^0.6.3 이후 main.dart의 상단에 호출하기 import 'package:contacts_service/contacts_service.dart'; 설치를 한 다음엔 무조건 실행되고 있는 프로그램을 중지하고 재실행을 시켜야함!! 이후 ContactsService.getC..

Flutter 2023.08.07

[Flutter] 유저에게 앱 권한 요청하기 & A dependency may only have one source 에러 해결

유저에게 앱 권한 요청하기 모바일에서 유저의 모바일에 있는 데이터를 사용하기 위해선 권한 요청을 하게 되는데 권한 요청을 하기 위해선 패키지를 하나 설치해야 한다. 프로젝트에 있는 pubspec.yaml에서 dependencies 아래 부분에 permission_handler를 작성해주면 되는데 우선은 강사님과 버전을 맞추기 위해 아래와 같이 작성 dependencies: flutter: sdk: flutter permission_handler: ^8.3.0 이후 permission_handler 를 선택 후 전구를 클릭 하여 Pub get을 클릭하면 설치가 된다. 다만 여기서 **A dependency may only have one source** 와 같은 에러가 발생하게 된다면 문제는 들여쓰기가 잘..

Flutter 2023.08.07

[백준, 4779번] 칸토어 집합

답이 잘 나왔는데 에러가 나길래 확인해보니... 파일의 끝에서 입력을 멈춘다를 잊고 있었다... 그래서 EOF(End of File) 예외처리를 통해 해결 그리고 처음에는 배열을 이용해서 풀어보려고 파라미터로 n과 해당 함수가 가질 수 있는 가장 큰 인덱스 값도 함께 넣어줬는데 그냥 이렇게 푸는게 더 편해서 ㅎㅎ def cantoer(n): if n == 1: return '- -' else: return cantoer(n-1) + ' '*(3**(n-1)) + cantoer(n-1) while True: try: n = int(input()) if n == 0: print('-') else: print(cantoer(n)) except EOFError:break

알고리즘 2023.08.07

[SWEA, 5110번] 수열 합치기

SWEA를 푸는게 오랜만이라 무심코 tc를 그냥 i로 지정해놓고 출력했는데 답은 맞는데 왜 풀리지 않을까라고 생각하고 보니 아래의 3번째 for문에 i를 사용하고 있었어서 시간을 조금 보냈다... (주의하기!!) for tc in range(int(input())): n,m = map(int,input().split()) li = [float('inf')] for _ in range(m): li2 = list(map(int,input().split())) for i in range(len(li)): if li[i] > li2[0]: li[i:i] = li2 break li.reverse() print('#%d'%(tc+1), end=' ') print(*li[1:11])

알고리즘 2023.08.07

[백준, 9251번] LCS

아래 코드는 2차원 배열을 활용해 푸는 방법 아직도 dp를 활용하여 누적합을 만들어 내는 로직을 구현하는데에 많은 어려움이 있어서 여러 방법을 찾아보려고 노력중. 우선 아래 코드에서 else 구문에 dp[i][j-1] 을 추가하여 max로 값을 찾는 이유에 대한 의문을 제기할 수 있다. 결과적으로는 저 코드를 추가함으로서 이전에 나온 값이 이만큼 나온적이 있다라는 의미가 되는데 ACAYKP CAPCAK 예시를 들어보자면 i가 2의 경우 a = 'C' j = 1일 땐 b = 'C' 가 될 때는 같기에 이전까지의 누적 합에 해당하는 dp[i-1][j-1] 에서 +1 해주고 j = 2일 땐 b = 'A' 가 될 때는 다르니 현재의 dp 값에는 i-1 층에 해당하는 현재 j 값과, j 가 1이었을 때의 값 중 ..

알고리즘 2023.08.06

[백준, 10844번] 쉬운 계단 수

우선 문제 이해에 대한 어려움이 컷다 dp를 저장할 배열을 어떻게 만들어야하는지에 대한 어려움도 크게 다가왔다. 그래서 n+1의 수만큼 배열을 만들어 n+1차원 배열을 만들어 문제를 해결 이후 n = 1의 경우엔 1~9까지 모두 1개만 만들어지니 for i in range(1, 10): dp[1][i] = 1 로 빠르게 해결 후 n = 2부터 실행하게 해서 j = 0의 경우엔 갈 수있는 경로가 1밖에 없기에 dp[i-1][1] 로 이전 배열의 1번의 dp 값을 그대로 가져오기 마찬가지로 j = 9 또한 경로가 8밖에 없기에 dp[i-1][8] 로 이전 배열의 8번의 dp 값을 그대로 가져오기 다른 수의 경우엔 위아래로 갈 수 있기에 두 개의 dp값을 더한 값을 누적하여 풀기 n = int(input())..

알고리즘 2023.08.03