1. 조건문
| 조건문 | 허용되는 타입 |
| if문 | Boolean, boolean |
| switch문 | byte, Byte, short, Short, char, Character, int, Integer, String, enum |
다만, switch문의 괄호 안에는 long 타입을 사용할 수 없습니다.
가. if문
//1번
if(a > b) {
if(a > c) {
System.out.println(a);
}else {
System.out.println(c);
}
}else {
if(b > c) {
System.out.println(b);
}else {
System.out.println(c);
}
}
Code language: JavaScript (javascript)
//2번
if(a > b) {
if(a > c) {
System.out.println(a);
}else {
System.out.println(c);
}
}else if(b > c) {
System.out.println(b);
}else {
System.out.println(c);
}
Code language: JavaScript (javascript)
2번을 사용해라.
판단 기준(a)이 달라지면 새로운 if문을 생성하라.
나. short circuit
short circuit : 짧은 단위의 논리연산
int a = 3, b = 5, c = 4;
boolean flag = true;
flag = flag && (++a > 6);
System.out.println(flag + ", a : " + a);
// false, a : 4
Code language: JavaScript (javascript)
int a = 3, b = 5, c = 4;
boolean flag = false;
flag = flag && (++a > 6);
System.out.println(flag + ", a : " + a);
// false, a : 3
Code language: JavaScript (javascript)
자바는 짧은 단위의 논리 연산을 지원한다.
다. switch-case문
월별로 마지막 날을 출력하는 프로그램을 switch-case문으로 만들어 보았다.
int month = 1;
switch(month) {
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10 :
case 12 :
System.out.println(31);
break;
case 4 :
case 6 :
case 9 :
case 11 :
System.out.println(30);
break;
case 2 :
System.out.println(28);
break;
default :
System.out.println("i dont know");
}
Code language: JavaScript (javascript)
너무 길고 비효율적이다.
int month = 1;
switch(month) {
case 4 :
case 6 :
case 9 :
case 11 :
System.out.println(30);
break;
case 2 :
System.out.println(28);
break;
default :
System.out.println(31);
}
Code language: JavaScript (javascript)
유사 작업은 모아서 처리하고 압도적으로 많이 사용되는 경우를 default에서 처리하자.
잘 사용하면 굉장히 효율적이다.
2. 반복문
반복문의 4가지 요소 : 초기식, 조건식, 증감식, 실행문
import java.util.Random;
public class Lang_07 {
public static void main(String[] args) {
byFor();
byWhile();
}
private static void byFor() {
int sum = 0;
int cnt = 100;
double avg = 0;
Random rand = new Random();
for(int i = 0; i < cnt; i++){
sum += rand.nextInt(6) + 1; //0~5 + 1
}
avg = 1.0*sum/cnt;
System.out.printf("sum: %d, avg: %.1f%n", sum, avg);
}
public static void byWhile() {
int sum = 0;
int cnt = 100;
double avg = 0;
Random rand = new Random();
int i =0;
while(i< cnt){
sum += rand.nextInt(6) + 1; // 0~5 +1
i++;
}
avg = 1.0*sum/cnt;
System.out.printf("sum: %d, avg: %.1f%n", sum, avg);
}
}
/*
sum: 335, avg: 3.4
sum: 327, avg: 3.3
*/
Code language: JavaScript (javascript)
%.1f: float 소수점 1자리까지 반올림.
public class Atest {
public static void main(String[] args) {
float f = 3.3338f;
System.out.printf("f : %.3f %n", f);
f = 3.3335f;
System.out.printf("f : %.3f %n", f);
}
}
/*
f : 3.334
f : 3.333
*/
Code language: JavaScript (javascript)
f = 3.3335f;:3.3354로 반올림되어야 하지만 실수의 표현 한계(3.3334....)로 실제론3.333으로 반올림됨.
그냥 믿지 말자.
가. rabel break, rabel continue
중첩된 반복문을 break, continue하는 방법.
label:for(int i = 1; i <= 9; i++) {
for(int j = 1; j <= 9; j++) {
if(i==3) {
break label;
}
if(j==4){
contiune label;
}
System.out.println(i + "*" + j + " = " + i*j);
}
System.out.println("---------------------");
}
Code language: JavaScript (javascript)
label 자리는 label가 아닌 아무런 단어가 와도 된다.
나. 개선된 for문
int arr[] = {4,5,6,7,8,9};
int s = 0;
for(int data : arr){
s++;
if(s == 2) {
data = 999;
}
System.out.println(data);
}
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
/*
4
999
6
7
8
9
4
5
6
7
8
9
*/
Code language: JavaScript (javascript)
for(int data : arr){의 data는 arr의 값을 복사한 복사본이다.
값을 수정한다고 해서 원본이 변하진 않는다.
실제로 arr[1]는 999로 수정되지 않는다.
단, 경우에 따라서 수정되는 경우가 있다.
복사해 온 값이 주소값이면 원본은 수정된다.
잘 구분해서 사용하자.
![Featured image for [알고리즘] 창용 마을 무리의 개수](https://tired-i.com/wp-content/uploads/2026/01/image-48.png)
[알고리즘] 창용 마을 무리의 개수
0. 문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! 1. 문제 이해 이건 인접리스트를 만들고 dfs로 connected component의 수를 세는 문제라고 생각했다. 2. 실패 가. 실패 : 입력값 범위 입력값(사람의 번호)의 범위가 1부터 시작한다. 위와 같이 -1한다. 나. for(vector vec : adj)의 vec는 read-only index입니다. for(vector vec : adj)은 제대로 초기화되지 않는다! C++에서 vector는 call by value다. 기존의 벡터를 복사한 새로운 벡터를 비우는 것이 … 더 읽기
Java는 아니지만 참고할 수 있는 경우다.