Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions src/Problem1.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import java.util.Arrays;

//숫자의 배열을 받아서 총합을 구하는 함수를 구현해 주세요.

public class Problem1 {

//가장 익숙한 방법으로 문제를 해결해 주세요.
public int solution1(int[] nums) {
int answer = 0;
for (int num : nums) {
answer += num;
}
return answer;
}

//이번에는 재귀 함수로 문제를 해결해 주세요.
public int solution2(int[] nums) {
if(nums.length == 0) {
return 0;
}
int[] nums2 = Arrays.copyOfRange(nums, 1, nums.length);
return solution2(nums2) + nums[0];
}


//꼬리 재귀 함수로 바꿔보세요.

//꼬리 재귀 최적화를 통해서 최적화해 보세요.

public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6};
Problem1 problem1 = new Problem1();
int hap = problem1.solution1(arr);
System.out.println(hap);
int hap2 = problem1.solution2(arr);
System.out.println(hap2);
}
}
27 changes: 27 additions & 0 deletions src/Problem2.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
피보나치 수는 첫째 및 둘째 항이 1이며 그 뒤의 모든 항은 바로 앞 두 항의 합인 수열입니다.
n번째 피보나치 수를 구하는 함수를 작성해 주세요.
*/

//이번에는 재귀 함수로 문제를 해결해 주세요.
public class Problem2 {
public int solution(int num){
if (num == 0) {
return 0;
}
if (num == 1) {
return 1;
}
return solution(num - 2) + solution(num - 1);
}

//꼬리 재귀 최적화를 통해서 최적화해 보세요.
public int solution2(int num) {
return 0;
}

public static void main(String[] args) {
Problem2 problem2 = new Problem2();
System.out.println(problem2.solution(6));
}
}
47 changes: 47 additions & 0 deletions src/Problem3.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
주어진 10진수 숫자를 2진수 문자열로 변환하는 함수를 작성해 주세요.
*/


public class Problem3 {

//가장 익숙한 방법으로 문제를 해결해 주세요.
public String solution(int num) {
if (num == 0) {
return "0";
}
if (num == 1) {
return "1";
}
StringBuilder stringBuilder = new StringBuilder();
while (num > 0) {
int nameoji = num % 2;
stringBuilder.append(nameoji);
num /= 2;
}
return stringBuilder.reverse().toString();
}

//이번에는 재귀 함수로 문제를 해결해 주세요.
public String solution2(int num) {
if (num == 0) {
return "0";
}
if (num == 1) {
return "1";
}
int mok = num / 2;
String nameoji = solution2(num % 2);

return solution2(mok) + nameoji;
}

//꼬리 재귀 함수로 바꿔보세요.
//꼬리 재귀 최적화를 통해서 최적화해 보세요.

public static void main(String[] args) {
Problem3 problem3 = new Problem3();
System.out.println(problem3.solution(13));
System.out.println(problem3.solution2(13));
}
}
53 changes: 53 additions & 0 deletions src/Problem4.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*
주어진 2진수 문자열을 10진수 숫자로 변환하는 함수를 작성해 주세요.
*/

public class Problem4 {

//가장 익숙한 방법으로 문제를 해결해 주세요.
public int solution(String num) {
if (num.equals("0")) {
return 0;
}
if (num.equals("1")) {
return 1;
}
int answer = 0;
for (int i = 0; i < num.length(); i++) {
int n = num.charAt(i) - '0';
answer += n * Math.pow(2, num.length() - i - 1);
}
return answer;
}

//이번에는 재귀 함수로 문제를 해결해 주세요.
public int solution2(String num) {
if (num.equals("0")) {
return 0;
}
if (num.equals("1")) {
return 1;
}
if (num.equals("10")) {
return 2*1 + 2*0;
}
if (num.equals("11")) {
return 2*1 + 2 * 1;
}
if (num.equals("100")) {
return 4;
}
int first =num.charAt(0) - '0';

return (int)Math.pow(2, num.length() - 1) * first * solution2(num.substring(1));
}

//꼬리 재귀 함수로 바꿔보세요.
//꼬리 재귀 최적화를 통해서 최적화해 보세요.

public static void main(String[] args) {
Problem4 problem4 = new Problem4();
System.out.println(problem4.solution("100"));
System.out.println(problem4.solution2("100"));
}
}