본문 바로가기

전체 글

(15)
[매일알고] 타겟넘버 주어진 숫자를 더하거나 빼서 타겟 넘버를 만드는 방법의 수를 return 하는 함수 [풀이 1] 2진법 이용 각 숫자 앞에 들어갈 연산을 2진수로 나타낸다. ( + 는 1, - 는 0) Numbers 의 길이에 따라서 연산의 경우의 수는 2의 n승 (n= numbers의 길이) 예를 들어, numbers 가 123 으로 주어진다면 연산의 경우의 수는 2^3 = 8 개가 될 것이다. 2진수 i in range (1, 8) 연산 sum 000 -1-2-3 -6 001 -1-2+3 0 010 -1+2-3 -2 011 -1+2+3 4 100 1-2-3 -4 101 1-2+3 2 110 1+2-3 0 111 1+2+3 6 [풀이 2] 재귀함수 이용 예를 들어, numbers가 123으로 주어진다면 Len(nums..
[매일알고] 키패드누르기 - 프로그래머스 [알고리즘 조건] [solution 1] 휴대폰 자판을 x축, y축의 개념으로 설정 왼손/오른손과 다음 숫자와의 거리 -> abs함수로 x축, y축의 거리를 구함. X축은 문제가 없었지만 y축의 경우 문제가 있었는데, 0의 위치를 지정하는 것이었다. 1의 자리를 (0,0)으로 두고, 3쪽으로 갈수록 x값이 커지고, 7로갈수록 y값이 커지도록 설정하였는데, 0의 경우를 (1,3)으로 두는 규칙을 찾을수가 없었다. 그래서 결국 i==0 일 경우, 11로 바꿔서 위치를 설정하도록 했다. [solution 2] 아예 처음부터 0~9의 키패드의 위치를 지정해두고 시작하는 방법도 있다. 위의 방법은 list를 이용하여, index = 0 -> 0의 위치 / index = 1 -> 1의 위치를 가리키도록 미리 설정해..
[매일알고-8] 문자열 내 p와 y의 개수 문제) 문자열 내에서 원하는 문자를 찾는 문제 1. 나의 풀이 - Counter 함수 이용 2. list의 count 함수 이용
[매일알고-7] 서울에서 김서방찾기 문제) list에서 해당하는 값의 인덱스 찾기 list의 index 함수만 쓰면 간단하게 풀이할 수 있다.
[매일알고-6] 폰켓몬 문제) 주어진 list에서 서로 다른 수를 선택할 때, 다르게 선택할 수 있는 종류의 최대 1. 나의 풀이 주어진 list에서 서로 다른 수가 몇개인지 보기 위해 counter 함수를 이용 실수한 점이 있는데, counter로 된 nums를 굳이 dict로 다시 변환할 필요가 없다 d = Counter(nums)로만 작성해도 뒤의 연산을 할 수 있다. 2. set 이용 중복되는 숫자를 제외하고 보는 포인트 -> set 함수 이용 set 함수로 치환만 해도 중복되는 수가 사라지고, 그 lenth를 구해서 개수를 구할 수 있음
[매일알고-5] 체육복 (greedy algorithm) 1. set 이용 문제의 포인트는 중복이 없다는 점과 reserve 값도 lost 값에 있을수 있다는 것이다. set 자료형은 중복을 허용하지 않는 자료형이다. 또한 차집합을 간단하게 수행할 수 있다는 점에서 set 자료형을 이용하도록 한다. > 만일 list 자료형(중복허용)일 경우, 차집합과 같은 기능을 수행하려면 counter 함수를 이용할 수 있다. - Counter 함수 : list 안에 값들이 몇개씩 있는지 이를 사용해서 차집합(-)과 같은 기능을 간단하게 나타낼 수 있다. 이 외에도 덧셈(+), 합집합( | ), 교집합(&)까지 가능하다.
[매일알고-4] 신규 아이디 추천 입력받은 아이디를 위의 조건과 같이 변경해서 추천해주는 프로그램 1. 나의 풀이 2. 정규식 이용 정규식으로 풀면 아주 간단하다.. 정규식 표현은 이후의 글에서 정리하는 걸로.. 3. 나의 풀이와 간단한 풀이 비교 #2단계 : 나는 허용되는 문자만 찾아서 더해주는 방식으로 list의 append 함수를 생각하였으나, str은 'answer += c' 처럼 작성해도 뒤에 추가가 되고, 더 간단히 작성할 수 있다. #3단계: 단어 내에서 '..' 를 계속해서 찾기 위해 for n in range(rec.count('.')) -> 단어 내에서 .의 개수만큼 ..을 찾기 반복 그러나 while '..' in anwer 과 같이 작성하면 아주 간단하다. (for 문만 주로 쓰지 말고 while문도 이용할 것) (..
[파이썬] 문자열 매소드 문자열[0] 문자열 인덱스로 한 글자씩 출력 split('문자열') 해당 문자열 기준으로 나누기 rstrip() lstrip() strip() 오른쪽 공백 제거 왼쪽 공백 제거 양쪽 공백 제거 count('문자열') 찾을 문자열의 개수 find('문자열') 찾을 문자열이 몇 번째 인덱스에 위치하는지 find('문자열', '시작 위치') rfind('문자열') : 오른쪽부터 find startswith('문자열') 해당 문자열로 시작하면 true endswith('문자열') 해당 문자열로 끝나면 true join(문자열) 각 문자 사이에 문자열 삽입 replace('문자열', '문자열') 문자 치환