1. 서론 keystore 패스워드 분실 대처를 어떻게 할 것인가? 플레이 스토어에 게임을 업로드하고 2년, 가끔 앱이 삭제되지 않도록 언제까지 정책 위반을 수정하라는 메일이 온다.이번에 온 메일은 현재 빌드의 유니티 버전의 보안 이슈로, 패치된 유니티 버전 빌드를 재업로드 하라는 요청이었다. 다행히 프로젝트가 남아 있어서 유니티 에디터 버전업을 진행했다.2021.3.56f1 > 2021.3.45f2 하지만, 빌드를 진행하기 위한 keystore 비밀번호가 생각나지 않았다.(그때의 나는 어떤 비밀번호를 설정해뒀을까...) 이 글은 다음에 또 이런 일이 벌어질 때를 대비해 작성했다. 2. 해결 과정 keystore 재생성과 구글 개발자 콘솔 키 재설정 요청까지 우선, keystore의 비밀번호 재설정은 불..
분류 전체보기
디렉토리 구조 리눅스에서는 반드시, 루트폴더(/) 하위에 파일이 저장된다. 절대 경로와 상대 경로 절대경로 파일의 루트폴더부터 파일까지 모든 경로를 기입해 경로를 지정하는 것을 의미한다. 장점) 파일의 정확한 경로를 지정할 수 있다. 단점) 특정 상황에서 불필요하게 긴 경로를 기입해 호출해야 하기에 비효율적일 수 있다. 상대 경로 현재 명령을 내리는 지점을 기준으로 상대적으로 위치를 지정하는 것을 의미한다. 장점) 명령 내리는 지점에 따라 기입 경로를 변경해야 한다. 단점) 경로지정을 상대적으로 간소화해서 호출할 수 있기에 효율적이다. 디렉토리간 이동 $ pwd : 현재 경로 출력 $ cd '목적지' : '목적지'로 이동 $ cd . : '현재 폴더'로 이동 $ cd .. : 한 수준 '상위 폴더'로 이..
흔한 비밀번호를 입력해도 괜찮게 만들고 싶었지만 자꾸 폼 에러 메시지에서 안 된다고 해서 처리할 방법이 필요했다. 방법은 단순하다. django.contrib.auth.forms.py 에 들어가서 raise ValidationError부분을 지우면 된다.
settings.py INSTALLED_APPS = [ ... 'allauth', 'allauth.account', 'allauth.socialaccount', 'allauth.socialaccount.providers.google', 'allauth.socialaccount.providers.kakao', ... ] AUTHENTICATION_BACKENDS = ( ... 'allauth.account.auth_backends.AuthenticationBackend', ) SITE_ID = 1 SOCIALACCOUNT_LOGIN_ON_GET=True SOCIALACCOUNT_PROVIDERS = { 'kakao' : { 'SCOPE': [ 'profile_nickname', 'account_email'..
from math import ceil def solution(fees, records): basic_time = fees[0] basic_fee = fees[1] additinoal_time = fees[2] additional_fee = fees[3] car_dict = {} for record in records: time, car, in_out = record.split() if car in car_dict: car_dict[car].append(time) else: car_dict[car] = [time] car_fee_dict = {} for car in car_dict.keys(): for i in range(0, len(car_dict[car]), 2): if i == len(car_dic..
from collections import Counter def solution(N, stages): #실패율 => 도달했지만 클리어 못한 플레이어의 수 / 스테이지에 도달한 플레이어수 #스테이지의 개수 N, 현재 멈춰있는 스테이지의 번호 배열 stages #실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담긴 배열을 return하라. #현재 스테이지에 멈춘 사람들 / 전체 명수 - 전 스테이지의 명 수 빼기 => 실패율 for문으로 #dictionary로 order 만들기. stage_dict = Counter(stages) #스테이지에 따른 플레이어의 수 total_players = len(stages) #플레이어의 수 failer_dict = {} # print("stage dict : "..
from collections import deque def solution(queue1, queue2): queue1 = deque(queue1) queue2 = deque(queue2) queue1_sum = sum(queue1) queue2_sum = sum(queue2) cnt = 0 while queue1 and queue2: if queue1_sum == queue2_sum: break if cnt > (len(queue1) + len(queue2))*2: return -1 if queue1_sum < queue2_sum: tmp = queue2.popleft() queue1.append(tmp) queue1_sum += tmp queue2_sum -= tmp cnt += 1 elif queu..
SELECT FACTORY_ID, FACTORY_NAME, ADDRESS FROM FOOD_FACTORY WHERE ADDRESS LIKE "강원도%" ORDER BY FACTORY_ID LIKE문을 어떻게만 쓰는지 알면 쉬운 문제이다.
SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_OF_BIRTH FROM MEMBER_PROFILE WHERE GENDER = 'W' AND MONTH(DATE_OF_BIRTH) = 3 AND TLNO IS NOT NULL ORDER BY MEMBER_ID ASC MONTH라고 DATE에서 날짜만 리턴해주는 간편한 함수를 쓰니 좋다. LIKE나 IN보다는 훨 나은 듯?
import numpy as np def solution(arr1, arr2): arr1 = np.array(arr1) arr2 = np.array(arr2) answer = arr1@arr2 return answer.tolist() numpy 쓰면 쉽게 해결 된다. 그리고 array는 리스트로 바꾸려면 list() 함수가 아니라 tolist() 메서드를 써야 한다. 그리고 행렬의 곱이 n x m , m x z 같은 형식이 아닌데도 가능한 이유는 numpy가 다 알아서 해결해주기 때문이다. 만약 1 x 3 , 1 x 2 행렬이 있다면 3 x 1, 1 x 2로 자체 변환해 계산해준다. 아마 이걸 브로드캐스팅이라고 했던 것 같기도..