본문 바로가기

공부106

[programmers] 멀리 뛰기 멀리 뛰기 멀리 뛰기 x효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는(1칸, 1칸, 1칸, 1칸)(1칸, 2칸, 1칸)(1칸, 1칸, 2칸)(2칸, 1칸, 1칸)(2칸, 2칸)의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 출력하는 jumpCase 함수를 완성하세요. 예를 들어 4가 입력된다면, 5를 반환해 주면 됩니다. 완전 복잡한 문제라고 생각했다. ㅇㅏ니 한칸 두칸 뭐 어쩌라고.. ^^.. 했는데 1칸인 경우, 2칸인 경우, 3칸인 경우,... 모두 나열해 보니 피보나치 수열이 되었다.진짜 한참을 고민했는데 피보나치 수열이라니.. 2018. 5. 22.
[programmers] N개의 최소공배수 N개의 최소공배수 N개의 최소공배수 x두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. nlcm 함수를 통해 n개의 숫자가 입력되었을 때, 최소공배수를 반환해 주세요. 예를들어 [2,6,8,14] 가 입력된다면 168을 반환해 주면 됩니다. 내가 처음으로 메서드를 두개 만들어서 푼 문제가 아닐까 싶다. 원래 한 메소드에다가 다풀었었는데 다들 메소드 두 개로 나누어서 풀길래 보기에도 더 예쁘고 더 간편해보여서 나도 나눠봤다.두 개의 수로 최대공약수와 최소공배수는 앞에서 구.. 2018. 5. 22.
[programmers] 야근 지수 야근 지수 야근 지수 x회사원인 수민이는 많은 일이 쌓여 있습니다. 수민이는 야근을 최소화하기 위해 남은 일의 작업량을 숫자로 메기고, 일에 대한 야근 지수를 줄이기로 결정했습니다. 야근 지수는 남은 일의 작업량을 제곱하여 더한 값을 의미합니다. 수민이는 1시간 동안 남은 일 중 하나를 골라 작업량 1만큼 처리할 수 있습니다. 수민이의 퇴근까지 남은 N 시간과 각 일에 대한 작업량이 있을 때, noOvertime 함수를 제작하여 수민이의 야근 지수를 최소화 한 결과를 출력해 주세요. 예를 들어, N=4 일 때, 남은 일의 작업량이 [4, 3, 3] 이라면 야근 지수를 최소화하기 위해 일을 한 결과는 [2, 2, 2]가 되고 야근 지수는 2^2 + 2^2 + 2^2 = 12가 되어 12를 반환해 줍니다. .. 2018. 5. 22.
[programmers] 다음 큰 숫자 다음 큰 숫자 다음 큰 숫자 x어떤 수 N(1≤N≤1,000,000) 이 주어졌을 때, N의 다음 큰 숫자는 다음과 같습니다.​N의 다음 큰 숫자는 N을 2진수로 바꾸었을 때의 1의 개수와 같은 개수로 이루어진 수입니다.1번째 조건을 만족하는 숫자들 중 N보다 큰 수 중에서 가장 작은 숫자를 찾아야 합니다.​예를 들어, 78을 2진수로 바꾸면 1001110 이며, 78의 다음 큰 숫자는 83으로 2진수는 1010011 입니다.N이 주어질 때, N의 다음 큰 숫자를 찾는 nextBigNumber 함수를 완성하세요. 예..? 2진수요..? 갑자기요..? 1갯수가 같고 더 큰 수 중 가장 작은 수요..?는 Integer클래스의 bitCount()메소드로 깔끔하게 해결 ^^~!bitCount()메소드는 괄호 안.. 2018. 5. 22.
[programmers] 시저 암호 시저 암호 시저 암호 x어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다.​A를 3만큼 밀면 D가 되고 z를 1만큼 밀면 a가 됩니다. 공백은 수정하지 않습니다.​보낼 문자열 s와 얼마나 밀지 알려주는 n을 입력받아 암호문을 만드는 caesar 함수를 완성해 보세요.​“a B z”,4를 입력받았다면 “e F d”를 리턴합니다. 처음에는 보고 뭐야 그냥 밀면 되잖아? 쉽네 했던 내 자신을 반성합니다....a부터 z까지 알파벳이 돌아가는데, z를 넘기면 다시 a로 돌아가야한다. 뭐 여기까지는 여러 처리방법도 있고 쉽다. 그런데 소문자 대문자 모두 처리해주어야했다. 우선은 단순하게 생각해서 'z'를 넘으면 'a'로 돌아가고 'Z'를 넘기면 'A'로 돌아.. 2018. 5. 22.
[programmers] 소수 찾기 소수 찾기 소수 찾기 xnumberOfPrime 메소드는 정수 n을 매개변수로 입력받습니다.​1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하도록 numberOfPrime 메소드를 만들어 보세요.​소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.(1은 소수가 아닙니다.)​10을 입력받았다면, 1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환5를 입력받았다면, 1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환 1은 소수가 아니므로 2부터 시작하도록 반복문을 구성한다. i가 2부터 n까지 반복하는 동안 1보다 크고 i보다 작은 수 중에 i가 나누어떨어지는 수가 있으면 소수가 아니므로 break문으로 반복문을 빠져나가도록 했다. 하지만 break문으로 .. 2018. 5. 22.
[programmers] 하샤드수 하샤드수 하샤드수 x양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.​Harshad함수는 양의 정수 n을 매개변수로 입력받습니다. 이 n이 하샤드수인지 아닌지 판단하는 함수를 완성하세요.예를들어 n이 10, 12, 18이면 True를 리턴 11, 13이면 False를 리턴하면 됩니다. 숫자를 문자열로 바꾸어준 후 split해주었다. 각 자릿수를 더해서 수가 나누어지는지 판단했다. 나처럼할 필요 없이 그냥 sum을 0으로 초기화한 뒤에 10으로 나눈 나머지를 더해주고, 100으로 나눈 나머지를 더해주고, 1000, 10000, ... 을 나누는 식으로 반복문을 구성해도 된다. 굳.. 2018. 5. 22.
[programmers] 최솟값 만들기 최솟값 만들기 최솟값 만들기 x자연수로 이루어진 길이가 같은 수열 A,B가 있습니다. 최솟값 만들기는 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱한 값을 누적하여 더합니다. 이러한 과정을 수열의 길이만큼 반복하여 최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표입니다.​예를 들어 A = [1, 2] , B = [3, 4] 라면​A에서 1, B에서 4를 뽑아 곱하여 더합니다.A에서 2, B에서 3을 뽑아 곱하여 더합니다.​수열의 길이만큼 반복하여 최솟값 10을 얻을 수 있으며, 이 10이 최솟값이 됩니다.수열 A,B가 주어질 때, 최솟값을 반환해주는 getMinSum 함수를 완성하세요. 수학적으로 생각해보자. 어떤 경우에 곱의 합이 가장 작아질까? 우선 가장 작은 수와 가장 큰 수를 곱하고, .. 2018. 5. 22.
[programmers] 2016년 2016년 2016년 x2016년 1월 1일은 금요일입니다. 2016년 A월 B일은 무슨 요일일까요? 두 수 A,B를 입력받아 A월 B일이 무슨 요일인지 출력하는 getDayName 함수를 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각​SUN,MON,TUE,WED,THU,FRI,SAT​를 출력해주면 됩니다. 예를 들어 A=5, B=24가 입력된다면 5월 24일은 화요일이므로 TUE를 반환하면 됩니다. 메소드를 최대한 이용해서 풀어보려고 했으나 11월과 2월에서 하루의 오차가 발생하는 현상이 일어나서 포기하고 단순하게 배열 month에 각 월의 일 수를 넣어주고, weeks에 목요일부터 넣어주었다. (1월 1일은 금요일이므로 days % 7 = 1일 때 금요일이어야 한다.)a-1월 까지의 일 수를 .. 2018. 5. 22.
[programmers] 행렬의 곱셈 행렬의 곱셈 행렬의 곱셈 x행렬의 곱셈은, 곱하려는 두 행렬의 어떤 행과 열을 기준으로, 좌측의 행렬은 해당되는 행, 우측의 행렬은 해당되는 열을 순서대로 곱한 값을 더한 값이 들어갑니다. 행렬을 곱하기 위해선 좌측 행렬의 열의 개수와 우측 행렬의 행의 개수가 같아야 합니다. 곱할 수 있는 두 행렬 A,B가 주어질 때, 행렬을 곱한 값을 출력하는 productMatrix 함수를 완성해 보세요. 수학의 행렬 곱셈 방식을 알고 있다면 금방 풀 수 있을 것이다. 반복문의 반복횟수를 배열길이 계산으로 주자니 조금 헷갈리는 부분 말고는 어려울게 없는 문제였다. xclass ProductMatrix {​ public int[][] productMatrix(int[][] A, int[][] B) { int[][] a.. 2018. 5. 22.