알고리즘 38

[프로그래머스] Level1) 3진법 뒤집기

문제 설명 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한 조건 n은 1 이상 100,000,000 이하인 자연수입니다. 풀이 과정 (자바) ArrayList lst를 생성했다. 그리고 while 문을 돌면서 입력받은 n을 3으로 나눈 나머지 값을 lst에 넣었다. while 문은 n을 3으로 나눠 0보다 클 때까지 진행했다. int 형 배열 arr를 lst의 size 만큼으로 생성했고, int 형 j를 0으로 초기화했다. for 문을 돌면서 lst에 있는 값을 arr에 넣었다. int 형 answer, cnt, mul을 각각 0, 0, 1로 초기화했다. while 문을 돌면서 m..

[프로그래머스] Level1) 예산

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

[프로그래머스] Level1) 두 개 뽑아서 더하기

문제 설명 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한 조건 numbers의 길이는 2 이상 100 이하입니다. numbers의 모든 수는 0 이상 100 이하입니다. 풀이 과정 (자바) ArrayList lst를 생성했다. 이중 for 문을 돌면서 numbers 첫 번째 값과 두 번째 값, 세 번째 값,....을 더했고, 이때 더한 값이 lst에 없으면 lst에 추가했다. for 문을 종료하고, int 형 배열 answer를 lst의 size 만큼으로 생성했다. for 문을 돌면서 lst에 있는 값을 answer에 넣었다. Ar..

[프로그래머스] Level1) 2016년

문제 설명 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT 입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요. 제한 조건 2016년은 윤년입니다. 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다) 풀이 과정 (자바) String 형 answer와 int 형 배열 arr, int 형 i를 각각 생성했다. arr은 1월부터 11월까지의 일수를 입력하기 위해 11 크기의 in..

[프로그래머스] Level1) 최소직사각형

문제 설명 명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로 길이와 세로 길이를 조사했습니다. 아래 표는 4가지 명함의 가로 길이와 세로 길이를 나타냅니다. 명함 번호 가로 길이 세로 길이 1 60 50 2 30 70 3 60 30 4 80 40 가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. 이때..

[프로그래머스] Level1) 나머지가 1이 되는 수 찾기

문제 설명 자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다. 제한 조건 3 ≤ n ≤ 1,000,000 풀이 과정 (자바) 입력받은 n이 3부터 1,000,000까지이므로, i는 2부터 시작해서 n전까지 for 문을 돌렸다. n을 i로 나눠 나머지가 1이 나올 때, 그 i를 answer에 넣고 해당 for 문으로 break 했다. 그리고 answer를 반환했다. 결과 다른 사람의 풀이 대체로 비슷하게 처리해서 추가하지 않았다. 기타 (생략)

[프로그래머스] Level1) 부족한 금액 계산하기

문제 설명 새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다. 놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요. 단, 금액이 부족하지 않으면 0을 return 하세요. 제한 조건 놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수 처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수 놀이기구의 이용 횟수 ..

[프로그래머스] Level1) [1차] 비밀지도

문제 설명 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다. 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 "공백"(" ") 또는 "벽"("#") 두 종류로 이루어져 있다. 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 "지도 1"과 "지도 2"라고 하자. 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다. "지도 1"과 "지도 2"는 각각 정수 배열로 암호화되어 있다. 암호화된 배열은 지도의 각 가로줄에서 벽 부분을 1, 공백 부분을 0으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열이다. 제한 조건 입력으로 지도의 한 변 크기 n 과 2개의 정수 배열 arr1, a..

[프로그래머스] Level1) 가운데 글자 가져오기

문제 설명 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다. 제한 조건 s는 길이가 1 이상, 100이하인 스트링입니다. 풀이 과정 (자바) 입력받은 s의 길이가 짝수일 때는 1, 홀수일 때는 0 값을 가지는 int형 i를 초기화했다. 그리고 s를 substring 했다. s.length를 절반으로 나눈 값에 대해 i를 뺀 위치부터 1 더한 위치 전까지를 구해 반환했다. 더보기 s.length() / 2 - i, s.length() / 2 + 1을 한 이유? 가운데 값을 반환해야 하므로, 우선, 입력받은 s를 절반으로 나눴다. (s.length() / 2 => A라고 지정한다.) 홀수) abcde 길이가 5이고, c를 반환..