본문 바로가기

알고리즘/프로그래머스46

프로그래머스 시저 암호 (level.3) 문제 : 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다.A를 3만큼 밀면 D가 되고 z를 1만큼 밀면 a가 됩니다. 공백은 수정하지 않습니다.보낼 문자열 s와 얼마나 밀지 알려주는 n을 입력받아 암호문을 만드는 caesar 함수를 완성해 보세요.“a B z”,4를 입력받았다면 “e F d”를 리턴합니다. 이 문제를 보자마자 a와 A가 아스키 코드 몇이더라..ㅎ 까먹어서 찾아보았다.이 문제에서 필요한 알파벳들의 아스키코드를 보면아스키코드 전체는 0~127까지알파벳은 26개, 대문자 A와 a 는 32 차이A= 65~96부터a= 97~122다. charAt을 사용하여 첫번째 문자를 추출하고Character.isUpperCase()를 사용 대문자인지 .. 2018. 2. 26.
프로그래머스 멀리뛰기 (level.3) 문제 : 효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는 (1칸, 1칸, 1칸, 1칸) (1칸, 2칸, 1칸) (1칸, 1칸, 2칸) (2칸, 1칸, 1칸) (2칸, 2칸) 의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 출력하는 jumpCase 함수를 완성하세요. 예를 들어 4가 입력된다면, 5를 반환해 주면 됩니다. 이 문제는 단순히 4칸을 가는 방법에 대해서만 구하려고 노력을 했었다. 그러다보니 답을 구하지 못했다. 알고보니 전체에 대한 흐름을 봐야지 풀 수 있는 문제였다. 1칸이 있을 때 = 1(1개) 2칸이 있을 때 = 1+.. 2018. 2. 21.
프로그래머스 야근지수 구하기 (level.3) 문제 : 회사원인 수민이는 많은 일이 쌓여 있습니다. 수민이는 야근을 최소화하기 위해 남은 일의 작업량을 숫자로 메기고, 일에 대한 야근 지수를 줄이기로 결정했습니다. 야근 지수는 남은 일의 작업량을 제곱하여 더한 값을 의미합니다. 수민이는 1시간 동안 남은 일 중 하나를 골라 작업량 1만큼 처리할 수 있습니다. 수민이의 퇴근까지 남은 N 시간과 각 일에 대한 작업량이 있을 때, noOvertime 함수를 제작하여 수민이의 야근 지수를 최소화 한 결과를 출력해 주세요. 예를 들어, N=4 일 때, 남은 일의 작업량이 [4, 3, 3] 이라면 야근 지수를 최소화하기 위해 일을 한 결과는 [2, 2, 2]가 되고 야근 지수는 2의2제곱 + 2의2제곱 + 2의2제곱 = 12가 되어 12를 반환해 줍니다. 우선.. 2018. 2. 20.
프로그래머스 콜라츠 추측 (level.2) 문제 : 1937년 Collatz란 사람에 의해 제기된 이 추측은, 입력된 수가 짝수라면 2로 나누고, 홀수라면 3을 곱하고 1을 더한 다음, 결과로 나온 수에 같은 작업을 1이 될 때까지 반복할 경우 모든 수가 1이 된다는 추측입니다. 예를 들어, 입력된 수가 6이라면 6→3→10→5→16→8→4→2→1 이 되어 총 8번 만에 1이 됩니다. collatz 함수를 만들어 입력된 수가 몇 번 만에 1이 되는지 반환해 주세요. 단, 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요. class Collatz { public int collatz(int num) { int count=0; int answer=0; while(count 2018. 2. 19.
프로그래머스 정수 내림차순으로 배치하기 (level.2) 문제 : reverseInt 메소드는 int형 n을 매개변수로 입력받습니다. n에 나타나는 숫자를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다. n은 양의 정수입니다. 이 문제를 푸는데 상당히 애를 먹었다. 배열에 문자형으로 저장을 할지, 정수형으로 저장할지 이것저것 해보다 정렬을 해야할 것 같아서 결국 substring을 사용해 정수형으로 저장을했다. 정렬은 버블정렬로 간단하게 구현하였으나, 마지막에 정렬한 배열을 다시 정수로 변환하는 과정에서 다시 막혔다. 각 자리수 만큼 10의 거듭제곱을 해주어 다 더해주는 방식으로 값을 구하긴 했으나 이 과정에서 스레드가 발생한다. 그래서 결국 검색을 했더니, 쓰레드를 제공해주는 StringB.. 2018. 2. 19.
프로그래머스 2016년, 원하는 특정요일구하기(level.2) 문제 : 2016년 1월 1일은 금요일입니다. 2016년 A월 B일은 무슨 요일일까요? 두 수 A,B를 입력받아 A월 B일이 무슨 요일인지 출력하는 getDayName 함수를 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각SUN,MON,TUE,WED,THU,FRI,SAT를 출력해주면 됩니다. 예를 들어 A=5, B=24가 입력된다면 5월 24일은 화요일이므로 TUE를 반환하면 됩니다. 이 문제의 같은 경우 사람들이 2016년의 각 월이 몇일로 끝나는지 알고있을 때 배열에 각 월의 일수를 넣어서 해당 값을 이용해 연산을 하였다. 하지만, 문제에서 2016년이 윤년인지 각 월이 몇일로 끝나는지 모르기 때문에 이렇게 해서는 안된다는 생각에 윤년구하는 방법과 다른방법을 합해서 정리해보기로 하였다.자바에서 .. 2018. 2. 14.