반응형

알고리즘 12

(프로그래머스) 42. 삼총사

코드 작성 및 풀이 1. 개선 후 from itertools import * # 내장함수 사용 def solution(number): cnt = 0 CombList = list(combinations(number, 3)) for i in range(len(CombList)): if sum(CombList[i]) == 0: # 변수 할당하지 않고 튜플 값 자체를 sum()으로 더해서 비교 cnt += 1 return cnt 2. 개선 전 변수 할당을 최소화 하기 위해 개선함 (test는 불필요한 변수) from itertools import * # 내장함수 사용 def solution(number): test = 0 cnt = 0 CombList = list(combinations(number, 3)) #..

알고리즘 2024.02.28

(프로그래머스) 41. 이상한 문자 만들기

정답 및 풀이 def solution(s): index = 0 # loop이 하나씩 돌때마다 count, 공백인 경우 초기화 answer = "" for i in range(len(s)): if s[i] == " ": answer += s[i] # 공백인 경우 answer 문자열에 그대로 붙이기 index = 0 # 공백인 경우 index 초기화 else: # 짝수 if index == 0 or index % 2 == 0: answer += s[i].upper() index += 1 # 공백이 아닌 경우 1씩 카운트 # 홀수 else: answer += s[i].lower() # test case가 대문자로 입력되는 경우도 존재 index += 1 # 공백이 아닌 경우 1씩 카운트 return answe..

알고리즘 2024.02.28

알고리즘) 백준 11047번 동전 0

이번 문제도 난이도는 그렇게 어렵지 않았습니다. 사칙연산을 알맞게 사용하는 법만 잘 알면 됩니다. 동전을 가장 작게 쓰는 방법은 가장 큰 동전부터 사용하여 그 범위를 줄여나가야 합니다. 예로 제시된 4200원에서 동전을 가장 적게 사용하려면 이렇게 최소한으로 사용해야 합니다. 그럼 이 로직을 어떻게 구성하느냐, 아래와 같습니다. 이렇게 조건을 제시해주고 동전의 수를 따로 다른 변수에 저장해주고 원래 가격에서 계산한 동전 (나머지 없는)을 빼줘야 작은 수의 계산이 가능해집니다. 코드로 표현하면 아래처럼 됩니다. 그럼 즐코!

알고리즘 2020.01.22

알고리즘) 백준 11399번 ATM

문제는 길어 어려워보이지만 이해만 한다면 아주 쉬운 문제가 되겠습니다. 결국 시간을 최소로 단축시키려면 가장 시간이 적게 걸리는 사람을 앞으로 배치하고 순차적으로 오래걸리는 사람을 뒤에만 배치해주면 됩니다. 결국 sort를 사용하면 되는 문제이죠. input으로 받은 리스트를 오름차순으로 정렬 후 걸리는 시간을 더해주기만 하면 됩니다. 파이썬 쉘에서 돌린 것이니 백준 문제에 제출하실 때에는 시간단축을 위해 꼭 sys.stdin.readline()으로 변환해주시기 바랍니다.

알고리즘 2020.01.22

알고리즘) 백준 8958번 OX  퀴즈

오 한방에 성공해서 짱 기분 좋슴니다 하하하 안될줄 알았는데 답 안보고 풀어보자 해서 풀었습니다 굳굳 시간도 얼마 안걸렸어요 헤헤 이렇게 로직을 만들어줍니다. 두번째에서 O가 나올 때 더해주는 포인트에 1점을 누적시켜주고, X가 나오게 되면 포인트를 초기화해주는 방식이죠. 로직은 다음과 같습니다. 그럼 이제 백준에서 요구하는 input의 조건에 대해서 알아보겠습니다. 처음에 제공되는 숫자는 앞으로 받을 문자열의 갯수입니다. 그 숫자를 반복문을 돌릴 갯수로 지정해주고 input을 받음에 따라 로직을 실행하는 방법을 사용했습니다. 저번에도 언급했듯이, 백준에서는 input보다는 sys.stdin.readline()을 사용해주는 것이 처리속도 면에서 월등하니 후자를 사용하는 것을 추천합니다. 혹시 런타임 에러..

알고리즘 2020.01.21

알고리즘) 백준 15552번 A+B

사용한 언어는 파이썬입니다. 파이썬 idle에서 sys.stdin.readline()으로 입력값을 받으려면 txt 파일에 input을 저장해서 불러오기 식으로 해야하는데 그렇게 하려면 위의 코드는 작동하지 않습니다. 일반 idle에서는 작동하지 않습니다. 첫 값은 주어지는 값의 갯수이니 받고 꼭 형변환 해주시고, 다음에 받는 값들은 a와 b에 int형으로 저장 후 출력해주시면 됩니다. map(int, sys.stdin.readline().split()) 보다 arr = sys.stdin.readline().split() 로 받으면 array 형태로 받아지게 되는데 print(int(arr[0]) + int(arr[1]))로 출력하는 것이 처리속도가 빨랐습니다. 즐코!

알고리즘 2020.01.17

알고리즘) 백준 2884번 알람시계

파이썬으로 풀어봤습니다. 어떤 시간이 주어져도 45분 이전으로 시계를 맞춰야 합니다. 제가 사용한 방법은 다음과 같습니다. 주어진 예시 10시 10분을 이용해보겠습니다. 분침이 45분보다 많으면 그냥 45분을 빼면 되고, 아니라면 분침을 영점으로 맞춰줍니다. 그럼 총 빼야 할 45분 중에 10분을 영점으로 맞추니 35분이 남겠지요. 그러면 그 35분을 60분에서 빼주면 결과값 25분을 돌려받게 되겠습니다. 그리고 영점으로 맞춰줄 때 시침도 한시간 빼주어야 합니다. 제시한 조건 중, 0시 0분부터 시작이니 한시간을 빼면 -1시가 나오지 않도록 조건도 걸어줍니다. 어떤 분은 있는 45분보다 적으면 15분을 더해주는 방식으로 푸셨더라구요. 처리 속도는 그게 더 빨랐습니다. 45분 전으로 시계 돌려놓기라 너무 ..

알고리즘 2020.01.14

알고리즘) map 함수를 사용하여 자릿수 나누기

map 함수를 사용하여 자릿수를 나누어 보겠습니다. a = 1234 라면, a = [1, 2, 3, 4] 로 만들려면 map 함수를 사용하는 것이 제일 빠르고 효과적입니다. a = 1234 b = list(map(int, str(a))) 어디서든 유용하게 쓰일 함수입니다! :) 더 좋은 방법을 알아냈습니다. 처음에 받으면 string으로 input을 받게 되어서 리스트 형식이 아니라도 인덱스 참조가 가능하더라구요. a = 1234 a[0] = 1 a[1] = 2 ... 이런식으로.. 그렇게 되면 p = int(a[0]) 이렇게 간단하게 형변환 해주면 처리속도도 그렇고 훨씬 간편하고 빠르게 사용할 수 있겠습니다. 왜 난 이걸 이제 알았지ㅠㅠ for 사용해서 리스트에 append로 하나하나 넣는 삽질을 해야..

알고리즘 2020.01.14
반응형