오늘도 저번주처럼 응용문제를 풀어보는 시간을 가져보았다.
열심히 공부를하고 코드를 써내려가려해도 아직까지는 순탄치 않은 거 같다.
입력
5, 4, 3, 2, 1
결과
5 x 4 x 3 x 2 x 1
4 x 3 x 2 x 1
3 x 2 x 1
2 x 1
1
public class Main {
static int factorial(int n) {
int result = 1;
for(int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
public static void main(String[] args) {
System.out.println(factorial(5));
}
}
factorial() 함수를 생성한 뒤, int result = 1;을 사용해 곱한 결과를 저장할 변수를 만들었다.
그 다음 for문을 사용해 1부터 입력받은 숫자 n까지 반복하며 result *= i;를 통해 값을 계속 곱하도록 작성하였다.
반복이 끝나면 return result;를 사용해 최종 결과를 반환하며, main 함수에서 factorial(5)를 호출해 결과를 출력하였다.
즉 5!인 5x4x3x2x1의 결과인 120이 출력된다.
배열로부터 특정 원소를 입력하면 인덱스를 반환하는 코드를 작성하라.
예) 배열 {5, 9, 2, 3, 8, 1, 7, 2} 있을 대, 9를 입력하면 1을 반환한다.
public class Main {
public static void main(String[] args) {
int[] arr = {5, 9, 2, 3, 8, 1, 7, 2};
int target = 9;
for(int i = 0; i < arr.length; i++) {
if (arr[i] == target) {
System.out.println(i);
}
}
}
}
먼저 int[] arr를 사용해 여러 개의 숫자를 배열에 저장하였다.
그 다음 target 변수에 찾고 싶은 숫자인 9를 저장하였다.
이후 for문을 사용해 배열의 처음부터 끝까지 반복하며 각 요소를 하나씩 검사하게 만들었다.
if 조건문을 통해 현재 배열 값이 target과 같은지 비교하고, 값이 같다면 print를 사용해 해당 숫자의 위치(인덱스)를 출력하도록 작성하였다.
즉 배열에서 9를 찾으면 9의 위치인 1이 출력되는 코드이다.
정수를 입력하면 절대값을 반환하는 함수를 정의하라.
예)
-5 -> 5
0 -> 0
3 -> 3
public class Main {
static int num(int n) {
if (n < 0) {
return n * -1;
} else {
return n;
}
}
public static void main(String[] args) {
System.out.println(num(-5));
System.out.println(num(0));
System.out.println(num(3));
}
}
먼저 static int num(int n) 함수를 생성하였다.
여기서 int n은 입력받는 숫자이고, int는 정수를 반환한다는 뜻이다.
그 다음 if 조건문을 사용해 입력한 숫자가 음수인지 검사하였다.
만약 음수라면 return을 사용해 음수를 양수로 변환하여 반환하도록 만들었다.
반대로 숫자가 0이거나 양수라면 else문이 실행되며 retun n;을 통해 입력값을 그대로 반환하도록 작성하였다.
main 함수에서는 num(입력숫자)을 호출하여 입력된 숫자의 절대값을 출력하게 만들었다.
1부터 10까지의 숫자들을 대상으로 홀수의 합과 짝수의 합을 각각 구하라.
public class Main {
public static void main(String[] args) {
int a = 0;
int b = 0;
for (int i = 1; i <= 10; i++) {
if (i % 2 ==0) {
b += i;
}
else {
a += i;
}
}
System.out.println("홀수의 합" + a);
System.out.println("짝수의 합" + b);
}
}
int a와 b를 사용해 합계를 저장할 변수를 생성하였다.
a는 홀수의 합을 저장하고 b는 짝수의 합을 저장할 거다.
처음에는 아무값도 더해지지 않았기 때문에 0으로 시작한다.
그 다음 for문을 사용해 1부터 10까지 반복하게 만들었다.
여기서 i는 1씩 증가하며 1부터 10까지 반복된다.
이후 if 조건문을 사용해 현재 숫자가 짝수인지 검사하였다.
%은 나머지 연산자로 너무지가 0이면 짝수 나머지가 1이면 홀수를 의미한다.
짝수일 경우 b += i; 를 사용해 짝수 합 변수 b에 현재 숫자를 계속 더하도록 만들었다.
반대로 홀수일 땐 else문이 실행되며 a += i;를 사용해 홀수 합 변수 a에 값을 더하도록 작성하였다.
반복문이 모두 끝나면 print를 통해 각각의 결과를 출력하게 작성하였다.
최종 결과는
홀수의 합 25
짝수의 합 30
이라고 나온다.
기수(Base)와 지수(Exponents)를 입력하면 거듭제곱을 구하는 함수를 정의하라.
예) 2, 10 입력 -> 1024(2¹⁰)
public class Main {
static int power(int base, int exponent) {
int result = 1;
for (int i = 1; i <= exponent; i++) {
result *= base;
}
return result;
}
public static void main(String[] args) {
System.out.println(power(2, 10));
}
}
power 함수를 사용해 거듭제곱을 구하는 프로그램을 작성하였다.
먼저 base와 exponent라는 매개변수를 선언해 밑수와 지수를 입력받도록 하였다.
그다음 int result = 1;을 사용해 계산 결과를 저장할 변수를 생성하였다.
곱셈은 1부터 시작해야 하기 때문에 초기값은 1로 설정하였다.
이후 for문을 사용해 i가 1부터 exponent보다 작거나 같을 때까지 반복하도록 작성하였다.
반복문 안에서는 result *= base; 를 사용해 현재 결과값에 밑수를 계속 곱하도록 하였다.
반복이 모두 긑나면 return을 통해 최종 계산값을 반환하도록 하였다.
main 함수에서 power(2, 10)을 호출하면 2를 10번 곱한 값인 1024가 출력되는 것을 확인할 수가 있다.
아래의 문자형 배열의 길이를 구하라.
char[]s={'f','o','o'}
public class Main {
public static void main(String[] args) {
char[] s = {'f', 'o', 'o'};
System.out.println(s.length);
}
}
char[]s를 사용해 문자형 배열을 생성하고 f, o, o의 값을 저장하였다.
그 다음 s.length를 사용해 배열의 길이(요소 개수)를 구하였다.
length는 배열 안에 들어있는 요소의 개수를 반환하는 기능이다.
배열 안에는 f,o,o 총 3개의 요소가 들어있기 때문에 결과값으로 3이 출력된다.
아래의 세 문자형 배열 s1, s2, s3를 서로 비교하라.
char[] s1 = {'f', 'o', 'o'};
char[] s2 = {'f', 'o', 'o'};
char[] s3 = {'b', 'a', 'r'};
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
char[] s1 = {'f', 'o', 'o'};
char[] s2 = {'f', 'o', 'o'};
char[] s3 = {'b', 'a', 'r'};
System.out.println(Arrays.equals(s1, s2));
System.out.println(Arrays.equals(s1, s3));
}
}
먼저 char[]를 사용해 문자형 배열 s1, s2, s3를 생성하였다.
그 다음 배열끼리 값을 비교하기 위해 Arrays.equals()를 사용하였다.
이 기능은 두 배열 안의 요소들이 서로 같은지 비교해주는 메서드이다.
따라서 실행 결과는 true와 false 이렇게 나오게 된다.
두 집합의 교차곱을 구하는 함수를 정의해 보세요
예를 들어 두집합 {1,2,3,4}와 {7,8,9}가 있을 때

public class Main {
public static void main(String[] args) {
int[] a = {1,2,3,4};
int[] b = {7,8,9};
for (int i = 0; i <a.length; i++) {
for (int j = 0; j < b.length; j++) {
System.out.println("(" +a[i] + "," + b[j] + ")");
}
}
}
}
먼저 a 배열에는 1,2,3,4를 저장, b 배열에는7,8,9를 저장해 두 개의 배열을 생성하였다.
그 다음 for문을 사용해 배열 a를 반복시키고 그 다음 for문을 사용해 배열 b를 반복시켰다.
그런 다음 print를 사용해 조합해 출력시키면 (1,7) (1,8) (1,9)... 이런식으로 출력되는 것을 확인할 수가 있다.
오늘은 배열과 반복문, 함수 등을 활용한 다양한 문제들을 풀어보았다.
특히 배열에서 특정 값의 인덱스를 찾는 문제나 거듭제곱, 절대값, 교차곱 같은 문제를 풀면서 반복문과 조건문의 활용 방법을 더 익힐 수 있었다.
하지만 아직은 문제를 보면 바로 어떤 방식으로 풀어야 하는지 감이 잘 오지 않았고, 응용해서 코드를 작성하는 부분도 많이 어려웠다.
특히 반복문 안에서 변수의 흐름이나 배열의 인덱스를 사용하는 부분이 헷갈려 여러 번 다시 생각해 보아야 했다.
그래도 하나씩 설명을 듣고 직접 코드를 수정하면서 조금씩 원리를 이해할 수 있었고, 단순히 외우는 것이 아니라 흐름을 이해하는 것이 중요하다라는 점도 느낄 수 있었다.
아직 부족한 부분이 많지만 앞으로도 꾸준히 반복해서 연습하며 문제를 스스로 해결할 수 있도록 더 노력하고 싶다.