레이블이 알고리즘인 게시물을 표시합니다. 모든 게시물 표시
레이블이 알고리즘인 게시물을 표시합니다. 모든 게시물 표시

숫자의 표현 알고리즘 문제

안녕하세요

이번 시간에도 재밌는 알고리즘 문제 하나 가지고 왔습니다.

이건 레벨4짜리 문제로 못풀거라고 생각하고 일단 도전했으나

기분 좋게 풀려서 올려봅니다.

문제는 다음과 같습니다.


수학을 공부하던 민지는 재미있는 사실을 발견하였습니다. 그 사실은 바로 연속된 자연수의 합으로 어떤 숫자를 표현하는 방법이 여러 가지라는 것입니다. 예를 들어, 15를 표현하는 방법은
(1+2+3+4+5)
(4+5+6)
(7+8)
(15)
로 총 4가지가 존재합니다. 숫자를 입력받아 연속된 수로 표현하는 방법을 반환하는 expressions 함수를 만들어 민지를 도와주세요. 예를 들어 15가 입력된다면 4를 반환해 주면 됩니다.



저의 풀이는 아래와 같습니다~!


public class Expressions {

public int expressions(int num) {
int answer = 0;
int[] arr = new int[num+1];
for(int i=0; i<num; i++){
arr[i] = i+1;
}

for(int j=0; j<arr.length-1; j++){
for(int sp=0; sp<arr.length-1; sp++){
arr[j]+=arr[sp+(j+1)];
if(arr[j]==num){
answer++;
break;
}else if(arr[j]>num){
break;
}
}
}
return answer;
}

public static void main(String args[]) {
Expressions expressions = new Expressions();
// 아래는 테스트로 출력해 보기 위한 코드입니다.
System.out.println(expressions.expressions(15));
}

}

알고리즘 노답인 저도 계속 머릿속으로 생각하니 풀어집니다.

포기하는 순간 끝이니 계속해서 도전해보십시오

콜라츠 추측 문제 및 나의 풀이

안녕하세요

오늘도 잠깐 알고리즘 풀이법을 올려봅니다.

이건 레벨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을 반환해 주세요.'

문제가 조금 설명충이고 길어서 복잡해보이지만 정말 단순합니다.

if문과 반복문만 적절히 사용하면 초보자도 쉽게 풀수 있는 문제입니다.

일단 제 답안입니다.


class Collatz {
public int collatz(int num) {
int answer = 0;
int cnt=0;
while(cnt < 500){
cnt++;
if(num%2==0){
num = num/2;
}else if(num%2==1){
num = (num*3)+1;
}
if(num==1){
answer = cnt;
return answer;
}
}

answer = -1;
return answer;
}

// 아래는 테스트로 출력해 보기 위한 코드입니다.
public static void main(String[] args) {
Collatz c = new Collatz();
int ex = 6;
System.out.println(c.collatz(ex));
}

}


언젠가 알고리즘도 많이 풀고 궁리하다보면
높은 레벨의 문제도 쉽게 풀거라 믿습니다.
모두 힘냅시다!!



자바 평균구하기 문제

안녕하세요

이번 시간에는 {*}helloworld에서 올라온 문제를 하나 풀이하는 시간을 가지겠습니다.

일단 저도 개발을 썩 잘하는것이 아니라서

제가 올린게 최고의 정답이라고 생각하지 않습니다


일단 질문이 아래와 같습니다

'def average(list):
함수를 완성해서 매개변수 list의 평균값을 return하도록 만들어 보세요.
어떠한 크기의 list가 와도 평균값을 구할 수 있어야 합니다'


이에 대한 저의 풀이는 아래와 같습니다.

=================

public class GetMean {
    public int getMean(int[] array) {
    int result = 0;
    for(int i=0; i<array.length; i++){
    result+=array[i];
    }
        return (result) / array.length;
    }
   
    public static void main(String[] args) {
        int x[] = {5, 4, 3};
        GetMean getMean = new GetMean();
        // 아래는 테스트로 출력해 보기 위한 코드입니다.
        System.out.println("평균값 : " + getMean.getMean(x));
    }
}
=================

문제를 풀고 나서 정답이 되고 다른 사람들의 문제 풀이를 봤는데

그중에서 댓글이 가장 많고 참신했던 것이 있었습니다.

저는 여러줄로 처리한걸 이 사람은 한줄로 처리했네요;;




라이브러리를 사용해서 해결한건데, 신박하네요 참 ㄷㄷ

어쨋든 문제가 주어지면 어떤 방법을 써서 해결하는것도 중요하죠.