알고리즘/문제풀이

알고리즘/문제풀이

백준[2810] 컵홀더 (파이썬)

그리디 기본 연습용 마지막 문제이다. 예시로 그려보면서 판단한 것은 S와 L석의 개수를 각각 세어봐야 된다는 것이다. 사용할 수 있는 총 컵홀더의 갯수는 {맨 왼쪽의 컵홀더(1) + S석의 개수 + L석의 개수 / 2}이다. 그림을 몇 차례 그려보면 이해할 수 있을 것이다. 최대 인원을 구하라고 했으니 컵홀더 개수가 사람 수를 초과하는지도 꼭 확인해줄 필요가 있다. 아래는 내가 작성한 코드이다. n = int(input()) seats = str(input()) count = 1 # 맨 왼쪽의 컵홀더를 미리 세어준다. s = 0 # 좌석 갯수 세는 용도의 변수 l = 0 # 각 좌석 갯수 세기 for i in range(len(seats)): if seats[i] == "S": s += 1 else: l..

알고리즘/문제풀이

백준[2839] 설탕 배달 (파이썬)

여러 문제를 풀다 보니 슬슬 재미가 붙는 것 같다. 처음으로 브론즈에서 가장 높은 티어의 문제를 풀었다. 가장 효율적인 코드인지는 잘 모르겠지만 뿌듯한 감이 있다. 5x + 3y = n이라는 식을 이용해 풀었다. x는 반복되지 않아야 해서 위에 미리 저장을 해 고정시켰다. 5가 더 큰 값이기 때문에 x를 기준으로 삼았다. 먼저 5x를 식 오른쪽으로 넘겨 새로 저장해주었다. 반복문 속에서 n을 계속 사용해야 해서 m이라는 새로운 변수로 저장했다. x값을 점차 줄여나가면서 y에 들어갈 수 있는 값을 확인했다. n으로 딱 떨어지면 바로 반복문을 빠져나갈 수 있도록 했다. 또는 x로 더 이상 검사할 수 없을 때 반복문을 빠져나가도록 했다. 아래 코드에 주석으로 상세한 설명을 붙여놓았다. n = int(input..

알고리즘/문제풀이

백준[2864] 5와 6의 차이 (파이썬)

처음에 문제를 읽고 문제를 만드는 법도 정말 다양하다고 느낀 문제이다. 5와 6을 헷갈려해서 생긴 최솟값과 최댓값을 구하는 문제라니... 재밌는 것 같다. 간단해 보이는 문제인데 한참을 헤맸다. 파이썬 문법에 아직 익숙하지 않은 탓인 것 같다. 문자열로 입력을 받아 5를 먼저 전부 6으로 만들어 최댓값을 구했다. 그다음 6을 전부 5로 만들어 최솟값을 구했다. 함수로 만들 정도의 길이는 아닌 것 같아 그 부분은 패스했다. 더 좋은 방법이 있을 것 같다. 하지만 최대한 스스로 고민해보기로 했다. 이 문제를 통해 string의 replace 함수에 대해서 배울 수 있게 되었다. a, b = map(str, input().split()) # 각각의 값에 접근해야하기 때문에 문자열로 입력받음. a = a.rep..

알고리즘/문제풀이

백준[5585] 거스름돈 (파이썬)

두 번째 문제이다. 아직 겁이나 기본적인 문제들에만 깔짝대는 중이다. 코딩 테스트 관련 서적에도 실려있어 조금 수월하게 풀 수 있었던 문제이다. 내야 할 거스름돈과 입력값(지불할 돈)이 다르니 주의해야 한다. 반복문과 몫을 구하는 '//' 연산, 나머지를 구하는 '%' 연산을 번갈아 사용해 풀면 되는 문제다. 자세한 내용은 코드에 작성해 놓았다. pay = int(input()) # 지불할 돈 입력받기 pay = 1000 - pay # 내야 할 거스름돈 계산 charges = [500, 100, 50, 10, 5, 1] # 잔돈 단위 리스트로 작성 count = 0 # 잔돈의 개수 for charge in charges: count += pay // charge # 거스름돈을 잔돈으로 나눈 몫 = 그 잔..

알고리즘/문제풀이

백준[10162] 전자레인지 (파이썬)

첫 알고리즘 실전(?) 문제다. 그리디 문제다. 3개의 버튼 각각의 몫을 구하면 되는 문제다. 큰 수가 나머지 수들의 배수이기 때문에 거스름돈과 같은 기본적인 문제라고 할 수 있다. 가장 큰 수의 몫을 구해주고 나머지를 다음 수에 넘긴다. 차례로 진행한 후 마지막에 나머지가 남을 경우 -1을, 남지 않을 경우 리스트에 저장된 각 숫자를 반복문을 통해 출력해준다. 코드는 아래와 같다. t = int(input()) # 숫자 입력받음. buttons = [300, 60, 10] #단위가 초이기 때문에 통일 count = [] # 여러 개를 세어야 하기 때문에 리스트 형태로 만듦. for button in buttons: count.append(t // button) # 숫자를 나누고 몫을 저장. t = t ..

레이튼
'알고리즘/문제풀이' 카테고리의 글 목록