[프로그래머스/JAVA] 프로그래머스 문제 모음
언제든지 비공개 될수 있음을 명시합니다.
만약 문제 저작권에 위배된다면 바로 사라질수 있음을 미리 알려드립니다.
문제 찾기는 해당 문제 Ctrl + F 를 통해서 검색,,
홀수의 개수
함수의 인자값으로 양의 정수 n이 주어진다. 이때, 1부터 n 이하의 수들 중 홀수의 개수를 리턴하는 함수를 구현하시오.
class Solution {
public int solution(int n) {
int answer = 0;
for(int i = 1; i <= n; i++)
{
if(i % 2 == 1)
{
answer += 1;
}
}
return answer;
}
}
삼각형 넓이 구하기
함수의 인자로 삼각형의 밑변과 높이 길이가 주어진다.
주어진 밑변과 높이 길이를 이용하여 삼각형 넓이를 계산해 리턴하는 프로그램을 작성하시오.
class Solution {
public int solution(int width, int height) {
int answer = 0;
answer = (width * height) / 2;
return answer;
}
}
더하기 빼기 곱하기
인자로 두개의 인수가 주어집니다. 두 수의 합, 차 그리고 곱을 구하고, 이 값을 모두 합한 값을 리턴하는 프로그램을 작성하시오. 인수는 항상 num1 > num2를 만족하고, 항상 큰수에서 작은수를 뺍니다.
class Solution {
public int solution(int num1, int num2) {
int answer = 0;
answer = (num1 + num2) + (num1 - num2) + (num1 * num2);
return answer;
}
}
오늘 치킨은 내가 쏜다!
함수의 인자값으로 현재 가지고 있는 돈 money와 치킨 한마리의 가격인 chicken 을 받는다. 이때, 가지고 있는 돈으로 치킨을 최대한 몇 마리 살 수 있는지 계산하여 리턴하는 함수를 구현하시오.
class Solution {
public int solution(int money, int chicken) {
int answer = 0;
answer = money / chicken;
return answer;
}
}
곰돌이 푸는 꿀을 좋아한다
곰돌이 푸는 4일에 한번씩 꿀을 사러간다. 함수의 인자값으로 몇일이 지났는지 양의 정수 days가 주어질때, 곰돌이 푸가 총 몇개의 꿀을 샀는지 구해 리턴하는 함수를 구현하시오.
class Solution {
public int solution(int days) {
int answer = 0;
answer = days / 4;
return answer;
}
}
퍼즐 맞추기
밍밍이는 퍼즐 맞추기를 좋아한다. 밍밍이가 퍼즐 한조각을 맞출때 s초가 걸린다고 한다. 밍밍이가 m * n 짜리 퍼즐을 맞춘다고 할때, 총 몇초가 걸리는지 구해 리턴하는 함수를 구현하시오. 함수의 인자값으로 퍼즐의 가로세로 값인 m과 n, 그리고 한조각을 맞출때 걸리는 초인 s가 주어진다.
class Solution {
public int solution(int m, int n, int s) {
int answer = 0;
answer = m * n * s;
return answer;
}
}
정다면체 구별
어떤 정다면체의 면, 변, 꼭짓점의 개수가 주어지면, 어떤 정다면체인지를 리턴한다. 만약 정다면체가 이루어지는 조건이 주어지지 않는다면 "False"를 리턴한다.
class Solution {
public String solution(int face, int side, int apex) {
String answer = "";
if(face == 4 && side == 6 && apex == 4)
{
answer = "정사면체";
}
else if(face == 6 && side == 12 && apex == 8)
{
answer = "정육면체";
}
else if(face == 8 && side == 12 && apex == 6)
{
answer = "정팔면체";
}
else if(face == 12 && side == 30 && apex == 20)
{
answer = "정십이면체";
}
else if(face == 20 && side == 30 && apex == 12)
{
answer = "정이십면체";
}
else
{
answer = "False";
}
return answer;
}
}
고된 코딩
홍규는 코딩이 너무 힘들어서 코딩을 한다면 1시간 40분마다 커피 한잔을 마셔야 한다.
앞으로 코딩을 해야 하는 시간이 주어지면 홍규에게 필요한 커피의 개수를 구하여라.
홍규는 일을 시작하기에 앞서 커피를 한잔 마시고 시작한다.
class Solution {
public int solution(int h, int m) {
int answer = 0;
int coffee_time = 100;
int need_time = h * 60 + m;
answer = (need_time / coffee_time) + 1;
return answer;
}
}
각도와 사분면
아래 그림과 같이 좌표평면에 각도가 주어진다.
각이 어느 사분면에 위치해있는지를 구하여라.
우상단이 제1사분면,
좌상단이 제2사분면,
좌하단이 제3사분면,
우하단이 제4사분면이다.
class Solution {
public String solution(int theta) {
String answer = "";
int sub = ((theta / 90) % 4) + 1;
if(theta % 90 == 0)
{
answer = "좌표축";
}
else if(sub == 1)
{
answer = "제1사분면";
}
else if(sub == 2)
{
answer = "제2사분면";
}
else if(sub == 3)
{
answer = "제3사분면";
}
else if(sub == 4)
{
answer = "제4사분면";
}
else
{
answer = "좌표축";
}
return answer;
}
}
토끼와 거북이
토끼와 거북이가 20km 마라톤 경주를 합니다. 거북이는 쉬지 않고 기어 가며, 토끼는 도중에 낮잠을 잡니다.
토끼가 이길 경우 0을, 거북이가 이길 경우 1을, 비길 경우 2를 리턴 하는 프로그램을 구현 하세요.
입력
rabbit - 토끼의 속력 입니다. ( 단위는 km/h 입니다)
turtle - 거북이의 속력 입니다. (단위는 km/h 입니다)
nap - 토끼의 낮잠 시간 입니다. (단위는 시간 입니다)
class Solution {
public int solution(int rabbit, int turtle, int nap) {
int answer = 0;
double rabbit_time = 20.0 / rabbit * 1.0;
double turtle_time = 20.0 / turtle * 1.0;
if(rabbit_time + nap < turtle_time)
{
answer = 0;
}
else if(rabbit_time + nap > turtle_time)
{
answer = 1;
}
else
{
answer = 2;
}
return answer;
}
}
n과 m 사이에 k의 배수는 몇개가 있을까
함수의 인자로 양의 정수 n, m, k가 주어진다. 이때, n 이상, m 이하의 정수들중 k의 배수가 몇개있는지 구하시오.
class Solution {
public int solution(int n, int m, int k) {
int answer = 0;
for(int i = n; i <= m; i++)
{
if(i % k == 0)
{
answer += 1;
}
}
return answer;
}
}
요일 구하기
오늘은 2018년 1월 1일 월요일이다. 그렇다면 2007년 x월 y일은 무슨 요일일까? 이를 알아내는 함수를 구현하시오
class Solution {
public String solution(int x, int y) {
String answer = "";
String[] str = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
int[] Month = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31};
int Date = 0;
for(int i = 0; i < x - 1; i++)
{
Date = Date + Month[i];
}
Date = Date + y - 1;
answer = str[Date % 7];
System.out.println(answer);
return answer;
}
}
버그의 개수 세기
시간이 m분 지날때 마다, 버그의 개수가 2m 개가 된다고 한다. 함수의 인자값으로 음이 아닌 정수 m이 주어질 때, 버그의 개수를 구해 리턴하는 함수를 구현하시오.
class Solution {
public int solution(int min) {
int answer = 1;
for(int i = 0; i < min; i++)
{
answer *= 2;
// System.out.println(answer);
}
return answer;
}
}
제곱수의 합
함수의 인자값으로 양의 정수 n이 주어진다. 이때, 2이상 n이하의 자연수들중 완전제곱수(ex. 4, 9, 16, 25... 등) 들의 합을 구해 리턴하는 함수를 구현하시오.
class Solution {
public int solution(int n) {
int answer = 0;
int value = 0;
int first = 0;
// int result = 0;
for(;;)
{
first++;
value = (int) Math.pow(first, 2);
if(value >= 2 && value <= n)
{
answer += value;
// result++;
}
if(value > n)
{
break;
}
}
// System.out.println(result);
// System.out.println(answer);
return answer;
}
}
각 자리수의 합
함수의 인자값으로 양의 정수 n이 주어진다. 이때, n의 각 자리수의 합을 구해 리턴하는 함수를 구현하시오.
class Solution {
public int solution(int n) {
int answer = 0;
while(n != 0)
{
answer += n % 10;
n /= 10;
}
return answer;
}
}
달 입력 받아 계절 출력하기
월이 입력될 때 계절이 출력되도록 해보자!
12, 1, 2 : winter
3, 4, 5 : spring
6, 7, 8 : summer
9, 10, 11 : fall
class Solution {
public String solution(int m) {
String answer = "";
if(m == 12 || m == 1 || m == 2)
{
answer = "winter";
}
else if(m == 3 || m == 4 || m == 5)
{
answer = "spring";
}
else if(m == 6 || m == 7 || m == 8)
{
answer = "summer";
}
else
{
answer = "fall";
}
return answer;
}
}
입력한 정수보다 같거나 작을때 까지 더하기
1, 2, 3 ... 을 계속 더해나갈때, 그 합이 입력한 정수보다 클때까지 계속 합하는 프로그램을 작성해보자.
즉, 1부터 n까지 정수를 계속 합해 간다고 할 때, 어디까지 합해야 주어진 값보다 더 커지는지 알아보고자하는 문제이고, 그 때의 합을 출력해야 한다.
예를 들어 57을 입력하면 1+2+3+...+8+9+10=55 에 다시 11을 더해 66일 때 66이 출력되어야 한다.
class Solution {
public int solution(int limit) {
if(limit <= 1)
{
return 1;
}
int answer = 0;
for(int i = 0; ; i++)
{
answer += i;
if(answer > limit)
{
break;
}
}
// System.out.println(answer);
return answer;
}
}
지그재그배열
NN 배열에 1부터 NN까지의 숫자를 채워넣으려고 한다.
숫자를 채워넣는 규칙은 아래처럼 지그재그 형태로 채워넣는다.
N*N 격자의 한 좌표(x, y)가 주어졌을 때, 그 칸에 들어가야 할 숫자를 구하여라.
가장 왼쪽 위가 (0, 0)이고, 오른쪽 위가 (0, N-1)이다.
class Solution {
public int solution(int N, int x, int y) {
int answer = 0;
if((x + 1) % 2 == 0)
{
answer = x * N + (N - y);
}
else if((x + 1) % 2 == 1)
{
answer = x * N + y + 1;
}
return answer;
}
}
나머지값 찾기
3개의 자연수가 주어질 때, 어떤 2 이상의 자연수 N에 대해서 세 자연수를 N으로 나누었을 때의 나머지가 같은 가장 작은 자연수 N의 값을 구하여라.
예를 들어서, 37, 59, 173은 2로 나누었을 때 나머지가 1로 같다.
class Solution {
public int solution(int a, int b, int c) {
int answer = 0;
int n1, n2, n3 = 0;
int temp = 2;
for(;;)
{
n1 = a % temp;
n2 = b % temp;
n3 = c % temp;
if(n1 == n2 && n2 == n3 && n3 == n1)
{
answer = temp;
break;
}
else if(temp > a && temp > b && temp > c)
{
answer = -1;
return answer;
// break;
}
else
{
temp += 1;
}
}
return answer;
}
}
숙제를 안하기 위한 노력
동준이는 평소에 숙제를 너무나도 하기 싫어한다.
그래도 숙제이기에 하기는 하지만, 미처 완료하지 못한 숙제들이 있다.
동준이의 부모님은 매우 엄하셔서 동준이가 숙제를 열심히 하기를 원한다.
때문에 숙제 완료율 프로그램에 동준이의 숙제 현황을 집어넣어 숙제 완료율이 떨어질 때 마다 동준이의 용돈을 삭감하기로 하였다.
하지만 동준이는 너무나도 숙제가 하기 싫었기에 꼼수를 찾아보았다.
숙제 현황 프로그램에 나오는 숙제 완료율은 정수 형태의 퍼센트 값으로 표시되기 때문에 한번 숙제를 안한다고 무조건 완료율이 떨어지지는 않는 것이다.
동준이는 몇 번까지 숙제를 안해도 완료율이 떨어지지 않는지를 알고 싶어한다.
지금까지 동준이에게 주어졌던 숙제의 수 X와 동준이가 완료한 숙제의 수 Y가 주어졌을 대, 동준이가 앞으로 몇 번까지 숙제를 안 할 수 있는지를 구하여라.
참고로, 지금 주어진 수치에서 숙제를 연속해서 안 할 수 있는 횟수를 구하는 것으로, 이 횟수를 세기 전, 세는 중간에 숙제를 하는 경우는 계산할 필요가 없다.
class Solution {
public int solution(int X, int Y) {
int answer = 0;
String temp1 = String.format("%.2f", Y * 1.0 / X * 1.0);
for(;;)
{
double temp = Y * 1.0 / X * 1.0;
if(Double.parseDouble(temp1) > temp)
{
answer = answer - 1;
break;
}
else
{
X += 1;
answer += 1;
}
}
return answer;
}
}
배열의 요소에 숫자 곱하기 다루기
함수의 인자로 정수형 배열 arr과 양의 정수 n이 주어진다. 이때, arr의 모든 요소에 n을 곱해 배열의 형태로 리턴하는 함수를 작성하시오.
class Solution {
public int[] solution(int[] arr, int n) {
int[] answer = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
answer[i] = arr[i]*n;
}
return answer;
}
}
배열에 하나만 들어있는 수 찾기
함수의 인자 값으로 양의 정수 n과, 정수형 배열 arr을 받는다. arr에는 1에서 n까지의 수가 들어있으며, 단 하나의 수만 한개가 들어있다. 이때 arr 배열에 하나만 들어있는 숫자를 찾아 리턴하는 함수를 구현하시오.
class Solution {
public int solution(int n, int[] arr) {
int answer=0;
for(int i = 0 ; i<arr.length ; i++){
answer=answer^arr[i];
}
return answer;
}
}
배열의 모든 요소 곱하기
함수의 인자로 정수형 1차원 배열 arr이 주어진다. 이때, 배열의 모든 요소를 곱해 리턴하는 함수를 작성하시오.
class Solution {
public int solution(int[] arr) {
int answer = 0;
answer =1;
for (int i = 0; i < arr.length; i++) {
answer *= arr[i];
}
return answer;
}
}
배열의 자리바꾸기
함수의 인자로 정수형 배열 arr이 주어진다. 이때, 배열의 값을 뒤집어 저장하는 함수를 작성하시오.
class Solution {
public int[] solution(int[] arr) {
int[] answer = {};
answer = new int[arr.length];
int sum = arr.length-1;
for (int i = sum; i >= 0; i--) {
answer[sum-i] = arr[i];
}
return answer;
}
}
3과 5의 배수의 합
10 미만의 자연수에서 3과 5의 배수를 구하면 3, 5, 6, 9이다. 이들의 총합은 23이다.
함수의 인자로 양의 정수 n이 주어졌을때, n 미만의 자연수에서 3과 5의 배수의 합을 구하시오.
class Solution {
public int solution(int n) {
int answer = 0;
int sum=0;
for (int i = 0; i <n; i++) {
if(i%3==0||i%5==0) {
sum +=i;
}
}
answer=sum;
return answer;
}
}
N 찍기
자연수 N이 주어졌을 때, 1부터 N까지 정수형 배열 answer에 담아 리턴하는 프로그램을 작성하시오.
class Solution {
public int[] solution(int n) {
int[] answer = {};
answer = new int[n];
for (int i = 0; i < n; i++) {
answer[i] = i+1;
}
return answer;
}
}
판별식 계산
방정식의 해의 존재 여부를 판단하기 위해 판별식을 사용하고는 한다.
수학에 약한 자빈이는 판별식 계산의 프로그램의 힘을 빌리기로 했다.
이차방정식의 각 항의 계수가 주어지면, 판별식을 통해 주어진 이차방정식의 근을 판별하는 프로그램을 만들어보자.
"실근 2개", "중근", "근이 없음" 상태를 구별하여 판별식의 값과 함께 출력하도록 하자.
class Solution {
public String[] solution(int a, int b, int c) {
String[] answer = new String[2];
int dValue = 0;
if(b % 2 == 0)
{
dValue = ((b/2) * (b/2) - (a * c));
}
else{
dValue = (b*b - 4*(a * c));
}
if(dValue > 0) {
answer[0] = String.valueOf(dValue);
answer[1] = "실근 2개";
} else if(dValue == 0) {
answer[0] = String.valueOf(dValue);
answer[1] = "중근";
} else {
answer[0] = String.valueOf(dValue);
answer[1] = "근이 없음";
}
return answer;
}
}
비타민 C 섭취
서울아산병원의 발표에 따르면, 비타민 C는 섭취하면 좋으나, 오히려 과다섭취할 때는 부작용을 초래할 수 있다고 한다.
음식물 안에서의 비타민 C 섭취량은 채소나 과일을 통하여 하루 200mg 이상, 500mg 이하 섭취를 권장하고 있다.
입력으로 음식들의 비타민 C 함유량이 주어지면, 주어진 음식들을 모두 먹었을 때 비타민 C 하루 권장 섭취량을 만족하는지를 검사하여라.
class Solution {
public boolean solution(double[] vitamins) {
boolean answer = true;
double a =0.0;
for (int i = 0; i < vitamins.length; i++) {
a += vitamins[i];
}
if(a>=200 && a<=500) {
answer = true;
}else {
answer = false;
}
return answer;
}
}
에라토스테네스의 체
수학에서 에라토스테네스의 체는 소수를 찾는 방법이다.
입력으로 자연수 n이 주어지면, 1부터 n까지 존재하는 모든 소수의 개수를 출력하라.
class Solution {
public int solution(int n) {
int answer = 0;
int[] number = new int[n+1];
for(int i=2; i<=n; i++) {
number[i] = i;
}
for(int i=2; i<=n; i++) {
if(number[i]==0) continue;
for(int j= 2*i; j<=n; j += i) {
number[j] = 0;
}
}
for(int i=0; i<number.length; i++) {
if(number[i]!=0) {
answer++;
}
}
return answer;
}
}
수업 준비물 지원
학생들의 실습에 필요한 물품들을 지원해주고 있다.
예를 들어서, 강좌 A에 전동 드릴이 필요한 경우에는 전동 드릴 한 세트를 지원해준다.
강좌 A에는 여러개의 분반이 있으며, 학교에서는 분반당 전동 드릴이 B개 들어있는 드릴 세트를 한 개 지원해준다.
만약 지원받은 전동 드릴의 개수가 분반의 학생 수보다 적은 경우에는, 인터넷에서 전동 드릴이 C개 들어있는 D원짜리 드릴 세트를 구매할 수 있는 금액을 지원해준다.
강좌 A의 각 분반의 학생 수, B, C, D가 입력으로 주어지면, 강좌 A에 총 몇원을 지원해줘야 하는지를 구하여라.
첫번째 입력 인자인 Grade 의 경우 각 분반별 학생 수를 표현하며, Grade 배열의 크기는 분반의 갯수가 된다. 즉 Grade 가 [1] 인 경우는 1개의 분반이 있으며, 해당 분반에는 1명의 학생이 있다. 만약 Grade 가 [3,7] 이라는 2개 분반이 있으며, 각 분반에는 3명, 7명의 수강생이 있다.
참고로 드릴 세트의 일부만 구매할 수는 없기 때문에 총 드릴의 개수가 학생의 수를 넘을 수 있으며, 각 분반마다 초과한 드릴은 타 분반에 양도할 수 없다.
class Solution {
public int solution(int[] Grade, int B, int C, int D) {
int answer = 0;
int student = 0;
for(int i = 0; i < Grade.length; i++)
{
student += Grade[i];
}
for(int i = 0; i < Grade.length; i++)
{
System.out.println(Grade[i]);
if(Grade[i] <= B)
{
answer += 0;
}
else if(Grade[i] > B)
{
int temp = Grade[i] - B;
System.out.println("ELSE IF");
System.out.println(temp);
if(temp <= C)
{
System.out.println("answer += D");
answer += D;
}
else
{
if(temp % C != 0)
{
answer += ((temp / C) + 1) * D;
}
else
{
answer += temp / C * D;
}
System.out.println(answer);
}
}
}
return answer;
}
}
구구단
함수의 인자값으로 양의 정수 n이 주어진다. 이때, 1부터 9까지의 구구단을 구하여 배열의 형태로 리턴하는 함수를 구현하시오.
class Solution {
public int[] solution(int n) {
int[] answer = {};
answer = new int[9];
for(int i=1;i<10;i++)
answer[i-1] = n*i;
return answer;
}
}
배열의 평균
함수의 인자값으로 양의 정수만 들어있는 정수형 배열 arr이 주어진다. 이때 arr의 요소들의 평균을 구하여 정수형 값으로 리턴하는 함수를 구하세요. 평균값이 소수점의 값으로 표현된다면 소수점 값은 버림을 해주세요.
class Solution {
public int solution(int[] arr) {
int answer = 0;
int sum=0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
answer = sum/arr.length;
return answer;
}
}
가장 많은 수 구하기
함수의 인자값으로 0~9까지의 숫자가 들어있는 정수형 배열 arr이 주어진다. 이때, 배열내의 가장 많이 존재하는 수를 찾아 리턴하는 함수를 구현하시오.
만약 가장 많이 존재하는 수가 여러개일 경우, 값이 가장 큰 숫자를 리턴하세요.
class Solution {
public int solution(int[] arr) {
int answer = 0;
int[] index = new int[arr.length];
int max = Integer.MIN_VALUE;
for(int i = 0; i < arr.length; i++)
{
index[arr[i]]++;
}
for(int i = 0; i < index.length; i++)
{
if(max < index[i])
{
max = index[i];
answer = i;
}
}
return answer;
}
}
문자열의 총 길이 구하기
함수의 인자값으로 문자열이 담겨있는 배열 strings가 주어진다. 이때, 배열에 들어있는 문자열의 길이를 모두 합해 리턴하는 함수를 구현하시오.
class Solution {
public int solution(String[] strings) {
int answer = 0;
for(int i = 0; i < strings.length; i++)
{
answer += strings[i].length();
}
return answer;
}
}
문자열 치환하기
문자열 str에서 target에 해당하는 문자를 찾아 replace라는 문자열로 치환하여, 이를 리턴하는 함수를 구현하시오.
함수의 인자값으로 문자열 str, target, replace가 주어진다.
class Solution {
public String solution(String str, String target, String replace) {
String answer = "";
str = str.replace(target, replace);
answer = str;
return answer;
}
}
대소문자 변경하기
함수의 인자값으로 true또는 false의 값을 가지고 있는 flag와 문자열 str이 주어진다. 이때, 만약 flag가 true라면 str을 모두 대문자로, fasle라면 str을 모두 소문자로 바꿔 리턴하는 함수를 구현하시오.
class Solution {
public String solution(boolean flag, String str) {
String answer = "";
if(flag == true)
{
answer = str.toUpperCase();
}
else
{
answer = str.toLowerCase();
}
return answer;
}
}
단어의 개수 구하기
함수의 인자값으로 문자열 str이 주어진다. 이때, str이 몇개의 단어로 이루어져있는지 구해 리턴하는 함수를 구현하시오.
class Solution {
public int solution(String str) {
int answer = 1;
str = str.replaceAll(" +", " ");
str = str.trim();
for(int i = 0; i < str.length(); i++)
{
if(' ' == str.charAt(i))
{
answer++;
}
}
return answer;
}
}
회문검사
팰린드롬(palindrome)이란 앞에서부터 읽으나 뒤에서부터 읽으나 같은 단어를 말한다. 'aba'나 'a'와 같은 단어는 팰린드롬이며, 'abaccbcb'나 'anavolimilana'와 같은 단어는 팰린드롬이 아니다.
주어지는 문자열 str이 팰린드롬을 만족하면, bool타입의 True를, 만족하지 않는다면 bool타입의 False를 리턴하는 함수를 구현하시오.
class Solution {
public boolean solution(String str) {
boolean answer = true;
int n = str.length();
for(int i = 0; i < (n / 2); i++)
{
if(str.charAt(i) != str.charAt(n - i - 1))
{
answer = false;
}
}
return answer;
}
}
호실 간판
기숙사에서는 호실 문 앞에 각 호실의 번호를 붙여두기로 하였다.
번호를 만들기 위해서는 금속 번호판 세트를 구매해야 하며, 각 세트에는 금속으로 된 0부터 9까지의 숫자가 1개씩 들어있다.
만들어야하는 호실 간판의 숫자 n이 주어지면, 해당 간판을 만들기 위해 몇 개의 번호판 세트를 구매해야하는지를 구하여라.
class Solution {
public int solution(int n) {
int answer = 0;
int[] arr = new int[10];
char temp = ' ';
String input = Integer.toString(n);
for(int i = 0; i < input.length(); i++)
{
temp = input.charAt(i);
for(int j = 0; j < arr.length; j++)
{
if((temp - '0') == j)
{
arr[j] += 1;
}
}
}
int max = arr[0];
for(int i = 0; i < arr.length;i++)
{
if(arr[i] > max)
{
max = arr[i];
}
}
answer = max;
return answer;
}
}
크면서 작다
배열에 정수들이 담겨서 주어진다. 다른 배열 하나에
홀수번째에 위치한 수(index 0, 2, 4, ...)는 그 수의 뒤에 위치해있는 수들과 비교하여 더 큰 수의 개수를 구하고,
짝수번째에 위치한 수(index 1, 3, 4, ...)는 그 수의 뒤에 위치해있는 수들과 비교하여 더 작은 수의 개수를 구하여 담아 리턴한다.
class Solution {
public int[] solution(int[] nums) {
int[] answer = {};
answer = new int[nums.length];
for(int i = 0; i < nums.length; i++)
{
if(i % 2 == 0)
{
int temp = 0;
for(int j = i; j < nums.length; j++)
{
if(nums[i] < nums[j])
{
temp += 1;
}
}
answer[i] = temp;
}
else if(i % 2 == 1)
{
int temp = 0;
for(int j = i; j < nums.length; j++)
{
if(nums[i] > nums[j])
{
temp += 1;
}
}
answer[i] = temp;
}
}
return answer;
}
}
가짜 난쟁이가 숨어있다.
백설공주의 집에 일곱 난쟁이가 아닌 여덟 난쟁이가 있다. 키가 100 이상인 한명의 가짜 난쟁이가 이 안에 숨어 있다고 할때, 가짜 난쟁이의 번호를 리턴하는 함수를 구현하시오.
예를 들어 난쟁이의 키가 배열 arr 로 주어지고, 그 값이 [20, 15, 60, 70, 50, 90, 110, 80]이라고 하자. 그렇다면 키가 100이 넘는 난쟁이의 번호(index 값)는 6이므로 6을 리턴하면 된다.
class Solution {
public int solution(int[] arr) {
int answer = 0;
int max = arr[0];
for(int i = 0; i < arr.length; i++)
{
if(arr[i] > max)
{
max = arr[i];
answer = i;
}
}
return answer;
}
}
알파벳 체크하기
함수의 인자값으로 문자열 str과, alphabet이 주어진다. 이때, alphabet이 str에 포함 되어있다면 True를, 포함 되어있지 않다면 False를 리턴하는 함수를 구현하시오.
bool 타입 변수를 리턴합니다.
class Solution {
public boolean solution(String str, String alphabet) {
boolean answer = true;
if(str.indexOf(alphabet) != -1)
{
answer = true;
}
else
{
answer = false;
}
return answer;
}
}
가장 큰 사각형 찾기
사각형의 가로와 세로의 길이를 담은 일차원 배열들을 담은 이차원 배열이 주어진다. 이때, 각 사각형의 넓이를 계산하여 가장 큰 사각형이 담겨있는 인덱스를 리턴하는 함수를 구현하시오.
class Solution {
public int solution(int[][] arr) {
int answer = 0;
int[] s = new int[arr.length];
for(int i = 0; i < arr.length; i++)
{
s[i] = arr[i][0] * arr[i][1];
}
int max = s[0];
for(int i = 0; i < s.length; i++)
{
if(s[i] > max)
{
max = s[i];
answer = i;
}
}
return answer;
}
}
평균은 넘겠지
함수의 인자값을 양의 정수를 담은 일차원 배열이 주어진다. 이때, 배열 요소들의 평균을 계산하고, 평균보다 낮은 요소의 개수를 구해 리턴하는 함수를 구현하시오.
class Solution {
public int solution(int[] arr) {
int answer = 0;
int sum = 0;
int avg = 0;
for(int i = 0; i < arr.length; i++)
{
sum += arr[i];
}
avg = sum / arr.length;
System.out.println(avg);
for(int i = 0; i < arr.length; i++)
{
if(avg > arr[i])
{
answer += 1;
}
}
return answer;
}
}
끝자리에 있는 0의 개수 세기
함수의 인자값으로 양의 정수가 들어 있는 1차원 배열 arr이 주어진다. 배열의 요소를 모두 곱 했을 때, 곱한 값의 끝자리에 위치하는 0이 몇개인지 세어 리턴하는 함수를 구현하시오.
class Solution {
public int solution(int[] arr) {
int answer = 0;
int sum = 1;
for(int i = 0; i < arr.length; i++)
{
sum = sum * arr[i];
}
String str = String.valueOf(sum);
for(int i = 0; i < str.length(); i++)
{
if(str.charAt(i) == '0') answer++;
}
return answer;
}
}
String concat 사용하기
함수의 인자값으로 두개의 문자열 str1과 str2가 주어진다. str1+str2, 즉 두 문자열을 병합하여 리턴하는 함수를 구현하시오.
class Solution {
public String solution(String str1, String str2) {
String answer = "";
answer = str1 + str2;
return answer;
}
}
가장 큰 자리수 구하기
함수의 인자값으로 양의 정수 n이 주어진다. 이때, n의 자리수중 가장 큰 수를 리턴하는 함수를 구현하시오.
class Solution {
public int solution(int n) {
int answer = 0;
String str = String.valueOf(n);
String[] strArr = str.split("");
int max = Integer.valueOf(strArr[0]);
for(int i = 0; i < strArr.length; i++)
{
if(max < Integer.valueOf(strArr[i]))
{
max = Integer.valueOf(strArr[i]);
}
}
answer = max;
return answer;
}
}
낭비하는 공간이 없도록...
명수는 아들을 교육시키기 위해 정리정돈하는 습관을 들이고자 하였다.
때문에 다 읽은 책은 다시 상자에 넣어두는 습관을 교육시켰는데, 아들이 책을 정리하는 방식이 상자의 공간 낭비가 심하다는 사실을 알아차렸다.
명수의 아들은 다 읽은 책이 책을 채우던 상자에 눕혀서 담는데, 넣으려던 책이 상자에 들어갈 경우에는 책을 넣지만, 책이 들어가지 않을 경우에는 기존 상자에는 더이상 책을 담지 않고 새 상자를 이용하여 책을 정리하였다.
명수는 책을 요리조리 조립하다보면 책이 들어갈 수 있을것이라고 생각하여 아들의 방식이 얼마만큼의 상자의 공간을 낭비하는지를 계산해보기로 하였다.
정리해야할 책의 크기가 주어지면, 낭비되는 상자의 공간을 구하여라.
class Solution {
public int solution(int[] nums) {
int answer = 0;
int[] arr = new int[nums.length];
for(int j = 0; j < nums.length-1; j++){
arr[j] = nums[j] + nums[j+1];
}
for(int i = 1; i < nums.length-1; i++){
for(int j = 0; j < nums.length-1; j++){
arr[j] = arr[j]%100000007 + arr[j+1]%100000007;
}
}
answer = arr[0];
return answer;
}
}
삼각형 합
어떤 수들이 주어졌을 때, 이웃한 수들끼리 더하고, 그 결과값에서 또다시 이웃한 수들끼리 더하는 행위를 반복해서 나오는 단 하나의 수를 주어진 수들의 "삼각형 합"이라고 한다.
예를 들어서, 5, 3, 7, 6, 8이 주어졌으면,
5 3 7 6 8
8 10 13 14
18 23 27
41 50
91
이므로, 91이 주어진 수들의 삼각형 합이다.
어떤 수들이 배열에 담겨져 주어지면, 그 수들의 삼각형 합을 100,000,007으로 나눈 나머지를 구하여라.
class Solution {
public int solution(int[] nums) {
int answer = 0;
for(int i = nums.length; i < nums.length; i--)
{
int arr[] = new int[nums.length - 1];
arr[i] = nums[i] + nums[i + 1];
System.out.println(arr[i]);
}
return answer;
}
}
노래방 시간이 언제 끝날까
현재 시간이 '시'(h)와 '분'(m) 단위로 주어지고 남은 노래방 이용시간이 '분'(time) 단위로 주어졌을 때, 노래방이 끝나는 시간을 계산하는 함수를 구현하시오.
예를 들어, 현재 시간과 남은 시간이 각각
22시 25분, 250분 일때, 이용 가능한 시간은 4시간 10분이 된다. 그리고 이용이 끝나는 시간은 26시 35분, 즉 다음날 2시 35분에 노래방 이용이 끝나게 되며 최종 계산 결과는 2시 35분이 된다.
(계산 결과 '시'는 0 <= h <= 23, '분'은 0 <= m <= 59 이 되게 한다.
함수의 리턴값은 정수형 배열에 h와 m를 순서대로 담아 리턴한다.
class Solution {
public int[] solution(int h, int m, int time) {
int[] answer;
answer = new int[2];
int temp = 0;
temp = h * 60 + m + time;
if(temp >= 1440)
{
temp = temp - 1440;
}
int hour = 0;
int minute = 0;
hour = temp / 60;
minute = temp % 60;
if(hour > 24)
{
hour = hour % 24;
}
answer[0] = hour;
answer[1] = minute;
return answer;
}
}
제곱이 아닌수
함수의 인자값으로 양의 정수 n이 주어진다. 이때, 2이상 n이하의 수들 중 어떤 수의 제곱한 수가 아닌 수의 개수를 구해 리턴하는 함수를 구현하시오.
class Solution {
public int solution(int n) {
int answer = n - 1;
for(int i=2; i <= n; i++)
{
if (Math.pow((int)Math.sqrt(i), 2) == i) {
answer -= 1;
}
}
return answer;
}
}
요리 경연대회
요리 경연 대회가 열렸다. 참가자는 총 5명, 5명의 심사위원이 각각의 참가자에게 점수를 매겼다. 매긴 점수에 대한 정보는 정수형 2차원 배열에 들어있으며, 이를 score이라는 이름의 함수의 인자값으로 받는다. 이때, 가장 높은 점수를 획득한 참가자의 번호를 리턴하는 함수를 구현하시오.
참가자 점수의 총점은 중복되지 않도록 한다.
class Solution {
public int solution(int[][] scores) {
int answer = 0;
int hap[] = new int[5];
int i = 0;
for (int[] is1 : scores) {
for (int is2 : is1) {
hap[i] += is2;
}
i++;
}
int max = hap[0];
int p=0;
for(int a=1;a<5;a++) {
if(max<hap[a]) {
max = hap[a];
p=a;
}
}
answer = p;
return answer;
}
}
문자열 반대로 만들기
함수의 인자값으로 꺼꾸로 돌려진 문자열 str이 주어진다. 이때, str를 다시 꺼꾸로 돌려 원상태의 문자열로 리턴하는 함수를 구현하시오.
class Solution {
public String solution(String str) {
String answer = "";
StringBuffer sb = new StringBuffer(str);
String reversedStr = sb.reverse().toString();
answer = reversedStr;
return answer;
}
}
암호를 풀어라!
당신은 미션을 수행하고 있는 요원이다. 당신에게 정수형 배열로 만들어진 암호가 주어졌다. 이 정수형 배열은 문자의 아스키코드 값을 가지고 있다고 할때, 암호를 풀어 평문을 리턴하는 함수를 구현하시오.
class Solution {
public String solution(int[] cryptograph) {
String answer = "";
for(int i=0; i < cryptograph.length; i++)
{
char ch = (char)cryptograph[i];
answer = answer + ch;
}
return answer;
}
}
정수 오름차순 정렬하기
함수의 인자값으로 정수형 1차원 배열 arr이 주어진다. 배열 arr을 오름차순으로 정렬하여 리턴하는 함수를 구현하시오. ( Arrays.sort 함수를 사용하면 안됩니다 )
class Solution {
public int[] solution(int[] arr) {
int[] answer;
answer = new int[arr.length];
for(int i=0; i<arr.length; i++) {
for(int j=i+1; j<arr.length; j++) {
if(arr[i] > arr[j]) { //오름차순
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
for(int i=0; i<arr.length; i++) {
System.out.print(arr[i]);
answer[i] = arr[i];
}
return answer;
}
}
겹치는 기간
두 개의 기간이 입력 될 때, 겹치는 기간이 총 몇 일인지 구하는 프로그램을 구현 하세요.
public class Solution {
public int solution(int[][] input1, int[][] input2) {
int answer = 0;
int month=0,day=0;
if (input1[1][0]>=input2[0][0]) {
month = (input2[0][0]-input1[1][0]) * 28;
day = input2[0][1] - input1[0][1];
answer = month + day;
}
return answer;
}
}
이웃한 숫자 터트리기
상하좌우로 인접한 숫자들은 모두 0으로 바꿔 버리는 프로그램을 구현 하세요.
class Solution {
public int[][] solution(int[][] nums) {
int temp[] = new int[5];
for(int i=0;i<5;i++) {
for (int j = 0; j < 4; j++) {
if(nums[i][j] == nums[i][j+1]) {
temp[i] = nums[i][j];
nums[i][j] =0;
}
}
}
for (int i = 0; i < 5; i++) {
if (nums[i][4] == temp[i]) {
nums[i][4] = 0;
}
}
int temp1[] = new int[5];
for(int i=0;i<5;i++) {
for (int j = 0; j < 4; j++) {
if(nums[j][i] == nums[j+1][i]) {
nums[j][i] =0;
}
}
}
int[][] answer = nums;
return answer;
}
}
다다익선
명수는 밤에 간식을 먹는 것을 좋아한다.
특히 명수는 간식의 질보다는 양을 중요시하기 때문에, 한정된 예산에서 최대한 많은 간식을 구매하고자 한다.
오늘 밤 명수가 가지고 있는 예산과 편의점에 있는 간식들의 비용이 주어지면, 명수가 오늘 몇 개의 간식을 구매할 수 있는지 구하고, 남은 거스름돈을 계산하라. 반환하는 결과는 2차원 배열로 [남은 금액, 간식의 개수] 형식이다.
class Solution {
public int[] solution(int n, int[] foods) {
int b;
for(int i = 0 ; i < foods.length ; i ++) {
for(int j = 0 ; j < foods.length -i -1 ; j ++) {
if(foods[j]>foods[j+1]) {
b = foods[j];
foods[j] = foods[j+1];
foods[j+1] = b;
}
}
}
int c=0;
for (int i=0;i<foods.length;i++) {
if(n>=foods[i]) {
n -=foods[i];
c++;
}
}
int[] answer = {n,c};
return answer;
}
}
'Programming > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 행렬의 합 (0) | 2020.10.12 |
---|---|
[프로그래머스] 두 개 뽑아서 더하기 (0) | 2020.10.12 |
[프로그래머스] 이상한 문자 만들기 (0) | 2020.10.12 |
[프로그래머스] 정수 제곱근 판별 (0) | 2020.10.11 |
[프로그래머스] 자연수 뒤집어 배열로 만들기 (0) | 2020.10.11 |
댓글
이 글 공유하기
다른 글
-
[프로그래머스] 행렬의 합
[프로그래머스] 행렬의 합
2020.10.12 -
[프로그래머스] 두 개 뽑아서 더하기
[프로그래머스] 두 개 뽑아서 더하기
2020.10.12 -
[프로그래머스] 이상한 문자 만들기
[프로그래머스] 이상한 문자 만들기
2020.10.12 -
[프로그래머스] 정수 제곱근 판별
[프로그래머스] 정수 제곱근 판별
2020.10.11