1. 알고리즘이란?
1-1 세 값의 최댓값 구하기
public class Max3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
int max = a;
if(max<b){
max = b;
}
if(max<c){
max = c;
}
System.out.println("최댓값: "+max);
}
}
이 문제를 해결하기 위해서는
1) 세 값을 Scanner로 입력 받은 다음 하나를 max로 임시 지정한다.
2) max값과 남은 두 값을 비교하면서 max값을 변경해 최대값을 출력하면 된다.(if문 사용)
이 문제는 여러 프로세스가 순차적으로 실행되는 구조인 순차구조와 if문으로 판단해서 프로그램의 실행 흐름을 변경하는 선택 구조로 이루어진다.
main 메소드 안에서 작성하는 것 외에 메소드를 작성해서도 구현이 가능한데, 아래 코드와 같이 구현하면 된다.
public class Max3 {
static int max3(int a, int b, int c){
int max = a;
if(max<b){
max = b;
}
if(max<c){
max = c;
}
return max;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("최댓값: "+max3(sc.nextInt(),sc.nextInt(),sc.nextInt()));
}
}
최소값을 구하는 경우에는 대소관계를 반대로 해서 코드 작성해주면 된다.
static int min3(int a, int b, int c){
int min = a;
if(min>b){
min = b;
}
if(min>c){
min =c;
}
return min;
}
중앙값을 구하는 경우에는 아래와 같이 대소관계를 비교해서 최대값보다 작고, 최소값보다는 큰 값을 구해주면 된다.
static int median(int a, int b, int c) {
if (a >= b && a <= c || a <= b && a >= c) {
return a;
//a가 b보다 크고 c보다 작은 경우 혹은 a가 b보다 작고 c보다 큰 경우 중앙값은 a
} else if (b >= a && c <= b || b <= a && c >= b) {
return b;
//b가 a보다 크고 c보다 작은 경우 혹은 b가 a보다 작고 c보다 큰 경우 중앙값은 b
} else {
return c;
//위 경우가 아니라면 중앙값은 c
}
}
1-2 조건 판단과 분기
입력한 정수가 양수인지, 음수인지, 0인지를 판단하는 코드다.
import java.util.Scanner;
public class JudgeSign {
static void judge(int x){
if(x>0){
System.out.println(x+"= 양수");
}else if(x<0){
System.out.println(x+"= 음수");
}else{
System.out.println(x+"= 0");
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
judge(sc.nextInt());
}
}
2. 반복
2-1. 1부터 n까지의 정수 합 구하기
반복문은 for문이나 while문으로 작성하면 된다. 먼저 while문으로 정수 합 구하는 코드를 작성해보겠다.
public class SumLoop {
static int sumWhile(int x){
int sum = 0;
int i=1;
while(i<=x){
sum+=i;
i++;
}
return sum;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println(sumWhile(sc.nextInt()));
}
}
for문으로 작성하면 아래와 같다.
import java.util.Scanner;
public class SumLoop {
static int sumFor(int x){
int sum=0;
for (int i = 1; i <=x ; i++) {
sum+=i;
}
return sum;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println(sumFor(sc.nextInt()));
}
}
(개인적으로 이런 반복문은 for문이 훨씬 편함 이유 모르겠음 ㅎㅎ...그냥 나의 느낌으로....for문이 이런거는 훨씬 편해유)
2-2. 양수만 입력받아 1부터 n까지의 합 구하기
이 문제는 do while 문을 이용해 코드를 작성하면 된다.
public class SumLoop2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x;
do {
x = sc.nextInt();
}while (x<=0);
int sum=0;
for (int i = 1; i <=x ; i++) {
sum+=i;
}
System.out.println("합계: "+sum);
}
}
do while문은 while안에 조건을 넣어서 해당 조건을 만족할 동안 do 안에 있는 코드를 실행한다.
while문의 조건을 만족하지 못하면 반복은 종료되게 된다.
2-3. 반복 과정에서 조건 판단하기
양수 n을 입력받고 1부터 n까지 합을 구하는 과정을 출력한다.
import java.util.Scanner;
public class SumVerbose {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int n;
do{
n = sc.nextInt();
}while (n<=0);
int sum=0;
for (int i = 1; i <=n ; i++) {
if(i==n){
System.out.print(i+" = ");
}else{
System.out.print(i+" + ");
}
sum+=i;
}
System.out.println(sum);
}
}
2-4. 다중 루프 다루기
중첩 루프로 직각이등변삼각형 별찍기를 하는 코드는 아래와 같다.
import java.util.Scanner;
public class Triangle {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
for (int i = 1; i <= x; i++) {
for (int j = 0; j < i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
높이를 스캐너로 입력받고 i쪽 for문으로 높이를 쌓아주고, j쪽 for문으로 가로쪽으로 * 찍어주면 된다.
[마무리]
자바 기본 문법, 반복문 조건문 정도만 알면 간단하게 해결할 수 있는 문제들이었다.
책의 목차를 보면 2강까지는 비교적 쉬운 파트일거라고 생각돼서 빠르게 공부하려고 한다.
이 책을 다음주 안으로 빠르게 회독하고 이 책보다 좀 더 어려운 책으로 알고리즘과 자료구조를 공부하려고 한다.
다음주까지 입문 달려보자구
'알고리즘 자료구조' 카테고리의 다른 글
[자료구조와 함께 배우는 알고리즘 입문] 5. 재귀 알고리즘 (2) (0) | 2023.07.05 |
---|---|
[자료구조와 함께 배우는 알고리즘 입문] 5. 재귀 알고리즘 (1) (0) | 2023.07.05 |
[자료구조와 함께 배우는 알고리즘 입문] 4. 스택과 큐 (0) | 2023.07.03 |
[자료구조와 함께 배우는 알고리즘 입문] 3. 검색 알고리즘(2) (0) | 2023.07.01 |
[자료구조와 함께 배우는 알고리즘 입문] 3. 검색 알고리즘(1) (0) | 2023.07.01 |