프로그래머스 - 3진법 뒤집기

문제 설명 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수입니다. 입출력 예 n result 45 7 125 229 입출력 예 설명 입출력 예 #1 답을 도출하는 과정은 다음과 같습니다. n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현 45 1200 0021 7 따라서 7을 return 해야 합니다. 입출력 예 #2 답을 도출하는 과정은 다음과 같습니다. n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현 125 11122 22111 229 따라서 229를 return 해야 합니다. -작성코드..

algorithm 2021.04.19

프로그래머스 - 예산

문제 설명 S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다. 물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다. 부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해주세요. 제한사항 d는 부서별로 신청한 ..

algorithm 2021.04.19

Greedy Algorithm (탐욕 알고리즘)

- Greedy Algorithm == 탐욕 알고리즘 이란 ? 최적의 해에 가까운 값을 구하기 위해 사용됩니다. 여러 경우 중 하나를 선택해야 할 때 최적의 값이라고 생각하고 값의 선택을 진행하여 최종값을 구하는 방식. -대표적인 탐욕 알고리즘 동전문제 지불해야 하는 값이 4720원 일때 1원,50원,100원,500원 동전으로 동전의 수를 가장 적게 지불하는 방법. 가장 큰 동전부터 최대한 많이 지불하는 방식으로 구현이 가능. price = 4720 coin = [500,100,50,1] # 큰 동전부터 지불하기 위해. total_coin_count = 0 details = list() for i in coin: coin_num = price // i total_coin_count += coin_num ..

algorithm 2021.04.18

프로그래머스 - 체육복

-문제설명 : 문제 설명 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다. 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solu..

algorithm 2021.04.18

프로그래머스 - 크레인 인형뽑기 게임

문제링크 : 코딩테스트 연습 - 크레인 인형뽑기 게임 [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4 programmers.co.kr 문제 설명 게임개발자인 "죠르디"는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다. "죠르디"는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다. 게임 화면은 "1 x 1" 크기의 칸들로 이루어진 "N x N" 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 "5 x 5" 크기의 예시입니다). 각 격자 칸에는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다. 모든 인형은 "1 x..

algorithm 2021.04.15

백준 2292 - 벌집

문제설명: www.acmicpc.net/problem/2292 2292번: 벌집 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌 www.acmicpc.net 작성코드 : rnum = int(input()) # 방의 숫자 tmp = 1 res = 1 plus = 6 # 일정범위 만큼 늘어나는 숫자인 6 if rnum == 1 : print(res) # 방의숫자가 1인 경우는 1 else: # 그 외의 경우 while True: # rnum(방의숫자)가 어느 범위에 있나 확인하기 위한 반복문 tmp += plus res += 1 if rnum

algorithm 2021.04.13

백준 2941 - 크로아티아 알파벳

문제설명 : www.acmicpc.net/problem/2941 2941번: 크로아티아 알파벳 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= www.acmicpc.net 작성코드 : calpha = ['c=','c-','dz=','d-','lj','nj','s=','z='] word = input() # ddz=z= for i in calpha: word = word.replace(i,'A') # dAA 으로 변경 print(len(word)) 코드해석: 크로아티아 알파벳에 해당되는 알파벳을 리스트로 따로 저장해둔다. for문을..

algorithm 2021.04.12

백준 5622 - 다이얼

문제설명 : www.acmicpc.net/problem/5622 5622번: 다이얼 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다. www.acmicpc.net 작성코드 : word = input().lower() # ucncic sec = ["abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"] # 3,4,5,..,10 초 res = 0 for i in range(len(word)): for j in sec: if word[i] in j : res += sec.index(j) + 3 # a면 0 이므로 +3 해준다. print(res) 코드해석 입력받은 문자를 모두 동일한 조건으로 만들기 위해 소문자로 ..

algorithm 2021.04.12

백준 1157 - 단어공부

문제설명 : www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 작성코드 : word = input().upper() # MISSISSIPI word2 = list(set(word)) # 중복제거 # ["M","I","S","P"] res = [] # ["4","1","1","4"] for i in word2: cnt = word.count(i) # 원본 문자열에 해당문자의 갯수를 계산 res.append(cnt) if res.count(max(res)) > 1 : # 가장 많이 사용된 단어의 ..

algorithm 2021.04.12

백준 10809 - 알파벳찾기

문제설명 : www.acmicpc.net/problem/10809 10809번: 알파벳 찾기 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출 www.acmicpc.net 작성코드 s = input() alp = list(range(97,123)) # 알파벳의 아스키코드 a~z [97,98,99,..,123] for i in alp: print(s.find(chr(i)),end=' ') # find 는 list에서 찾는값의 위치를 반환 없으면 -1 을 리턴한다는 특징이 있음 코드 풀이 및 느낀점 처음에는 a,b,c...z 까지 일일이 리스트로 넣어줬는데,..

algorithm 2021.04.09