일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Java
- RecyclerView
- python3
- 안드로이드 플랫폼
- 데이터바인딩
- Devexpress
- FragmentStateAdapter
- github api
- Android
- 필답고사
- REST API
- LRU
- Clean Architecture
- ViewPager2
- AndroidX
- ViewModel
- RETROFIT
- Android 컴파일
- TODO
- kotlin
- gson
- 웹 크롤링
- 수리통계
- 셀레니움
- 백준 15686
- Kotiln
- 통계대학원
- 안드로이드 API
- okHttp
- TabLayout
- Today
- Total
그냥 가끔의 기록장
백준 2438, 2439 본문
for문을 활용한 단골 문제인 별찍기다.
백준 2438 문제
문제 풀이
자칫하면 함정에 빠질 수 있다. 우선 우리는 별을 n번 찍어야 하고, 각 줄마다 별을 1,2,3,....n개씩 찍어야한다.
즉, 중첩 for문 (nested for loop)을 사용해야 한다.
설명을 타자로 치기 어려워서 손 글씨를 첨부한다.
첨부한 손글씨 해석이 어려울....수도 있으니 다시 적으면
1) 총 5개의 줄을 출력한다. (바깥쪽 for문)
2) 각 줄별로 1,2,3,4,5개의 별을 출력한다. (안쪽 for문)
for(int i=1; i<n+1; i++){ <- 1)
for(int j=0; j<i; j++){ <- 2)
printf("*");
}
printf("\n"); <-3)
}
이렇게 된다.
* 코드를 보고 차례로 i에 숫자를 대입해보면 이해하기 더 쉽다.
i=1일 때
1) 첫번 째 줄을 출력하되
2) j<1이므로 j=0 에서만 *을 1번 출력하고 안쪽 for문 빠져나옴
3) 한 줄 띄고 바깥쪽 for문 들어감
i=2일 때
1) 두번 째 줄을 출력하되
2) j<2이므로 j=0,1 총 2번 *을 출력하고 안쪽 for문 빠져나옴
3) 한 줄 띄고 바깥쪽 for문 들어감
......
i=5일 때
1) 다섯번 째 줄을 출력하되
2) j<5이므로 j=0,1,2,3,4 총 5번 *을 출력하고 안쪽 for문 빠져나옴
3) 한 줄 띄고 바깥쪽 for문 들어감
전체 코드는 아래와 같다.
백준 2439 문제
문제 풀이
2438 문제와 동일하다. 다만 오른쪽으로 정렬되어 있다.
줄 하나씩을 살펴보면
첫째 줄: 빈칸 4개+ 별 1개
둘째 줄: 빈칸 3개+ 별 2개
셋째 줄: 빈칸 2개+ 별 3개
.....
이렇게 구성되어 있다. 즉, 별과 빈칸의 합이 5로 이는 줄의 개수와도 같다. (바깥쪽 for문이 반복하는 횟수==n과 동일하다.)
우리는 이걸 통해 2439문제도 중첩 for문을 사용하되 안쪽 for문이 2개여야 한단 걸 알 수 있다.
(빈칸용 for문, 별 용 for문)
줄의 수가 n이라면 빈칸의 수는 n-i개, 별의 수는 i개 일 것이다.
즉, 2438에서
for(int i=1; i<n+1; i++){ <- 1)
for(int j=0; j<n-i; j++){
printf(" ");
}
for(int j=0; j<i; j++){ <- 2)
printf("*");
}
printf("\n"); <-3)
}
빨간색 코드만 추가하면 된다. 이론은 2438과 동일하다.
전체 코드는 아래와 같다.
'기타 개발 > 백준 문제풀이' 카테고리의 다른 글
백준 10951, 10952 (0) | 2020.03.03 |
---|---|
백준 10871 (0) | 2020.03.03 |
백준 11021, 백준 11022 (0) | 2020.02.26 |
백준 2741, 2742 (0) | 2020.02.26 |
백준 15552 (0) | 2020.02.26 |