implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.squareup.okhttp3:okhttp:3.8.0' implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0' 첫번째는 레트로핏 통신을 위해 필수적이고 두번째는 통신 결과를 json형태로 보기위해 선택적으로 추가 한 것입니다.. 세, 네번째는 로그에 찍히도록 하기 위해 추가해주었습니다. 자신의 baseUrl 위쪽에 먼저 적어 둡니다. public class RetrofitClient { private st..
며칠 전 플레이 스토어에 앱을 등록하고 검토 중에 있었다. 그런데 오늘 위 사진과 같은 이메일이 왔다. 구글링을 해보니 아마 웹뷰에서 유튜브를 틀었을 때 백그라운드에서 유튜브가 재생되는 부분이 문제 인 듯 하다. 유튜브 프리미엄, 유튜브 광고, 애드몹 여러 가지 수익모델을 이용하여 악용하는 것을 철저히 구글에서 검토하고 있다. 내 경우는 webView 부분을 고쳐봤다. 먼저 파일에 코드를 추가 하고 webView 가 있는 소스코드에 아래를 추가한다. @Override public void onPause() { super.onPause(); try { Class.forName("android.webkit.WebView") .getMethod("onPause", (Class[]) null) .invoke(w..
며칠 전 플레이 스토어에 앱을 등록하고 검토 중에 있었다. 그런데 오늘 위 사진과 같은 이메일이 왔다. 구글링을 해보니 아마 웹뷰에서 유튜브를 틀었을 때 백그라운드에서 유튜브가 재생되는 부분이 문제 인 듯 하다. 유튜브 프리미엄, 유튜브 광고, 애드몹 여러 가지 수익모델을 이용하여 악용하는 것을 철저히 구글에서 검토하고 있다. 내 경우는 webView 부분을 고쳐봤다. 먼저 파일에 코드를 추가 하고 webView 가 있는 소스코드에 아래를 추가한다. @Override public void onPause() { super.onPause(); webView.onPause(); } 그러면 webView를 보다가 앱을 화면에서 껐을 때 webView도 일시정지 되므로 그 안에서 재생 중이던 유튜브도 정지 된다...
일반적으로 깃허브에 소스코드를 올릴 때는 터미널로 설정을 했었는데 안드로이드 스튜디오에서는 그럴 필요없이 간편하게 내부에서 올릴 수 있다. 그럼 안드로이드 스튜디오 프로젝트를 GitHub에 올리는 방법을 알아보자 [VCS] -> [Import into Version Control] -> [Create Git Repository...] 순서대로 선택 한다. 그럼 이렇게 선택 파일이 뜬다. 그냥 Open 버튼을 눌러준다. Yes 버튼을 눌러준다. 그럼 이렇게 파일들이 빨강색으로 변하게 된다. 깃 저장소에 파일을 추가하면 초록색으로 변할 것이다. 그럼 이제 안드로이드 스튜디오와 GitHub를 연동해보자 [Preferences..] 를 선택한다. ( 아마 window 운영체제 에서는 Settings를 눌러야 되..
나만의 앱을 만들고 싶어서 고민을 하다 유입성도 좋고 1인 개발로 하기 쉬운 로또 앱을 선택했다. 플레이 스토어에서 로또 앱들 구경을 해보니 퀄리티 높은 앱들이 많았다. 그래서 디자인쪽으로 컨셉을 잘 잡자라고 생각 하여 귀엽고 깔끔한 인터페이스를 중점으로 만드려고 했다!! 아래 bottomNavigationView로 화면 전환을 할 수 있도록 하였다. 그리고 화면 전환 부분은 Activity로 각 개별 화면을 만드는 것이 아니라 Fragment로 Activity위에 띄우는 식으로 했다. listView 보단 recyclerView를 이용하는게 좋다길래 (책에서) 더 복잡하지만 해당 방식으로 했다. 기존 다른 로또 앱들 보면 리스트에 아무 항목도 없을 때 텍스트 뷰를 띄우길래 어떻게 해야될까 고민 했는데 ..
- 다이나믹 알고리즘 n = int(input()) d = [1, 2] for i in range(2, n): d.append(d[i-1]+d[i-2]) print(d[n-1] % 10007) 9095번에서 푼 풀이방식과 유사한 것 같아서 해보니까 아래와 같이 값이 맞아 떨어졌다 위의 방식을 기반으로 알고리즘을 구현했다 www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net
- 다이나믹 알고리즘 tc = int(input()) d = [] for i in range(tc): d.append(int(input())) arr0 = [1,0,1] # 0 1 2 ## 0 개수 arr1 = [0,1,1] # 0 1 2 ## 1 개수 for i in range(3, 41): arr0.append(arr0[i-1]+ arr0[i-2]) arr1.append(arr1[i-1]+ arr1[i-2]) for j in range(len(d)): print(arr0[d[j]], end=" ") print(arr1[d[j]]) www.acmicpc.net/problem/1003 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. ..
www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net from collections import deque m, n = map(int,input().split()) array = [] for i in range(n): array.append(list(map(int,input().split()))) dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] def bfs(): while queue: x, y = queue.popleft() ..