구현이란 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정이다.
문제 해결 분야에서 구현 유형의 문제는 '풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제'를 의미한다.
이 책에서는 완전 탐색, 시뮬레이션 유형을 모두 '구현' 유형으로 묶어서 다루고 있다.
완전탐색은 모든 경우의 수를 주저 없이 다 계산하는 해결 방법을 의미한다.
시뮬레이션은 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행해야 하는 문제 유형을 의미한다.
대표 예제 2.시각
정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성하시오.
예를 들어 1을 입력했을 때 다음은 3이 하나라도 포함되어 있으므로 세어야 하는 시각이다.
* 00시 00분 03초
* 00시 13분 30초
반면에 다음은 3이 하나도 포함되어 있지 않으므로 세면 안 되는 시각이다.
* 00시 02분 55초
* 01시 27분 45초
입력 조건
* 첫째 줄에 정수 N이 입력된다. (0 ≤ N ≤ 23)
출력 조건
* 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 출력한다.
입력 예시 출력 예시 5 11475
이 문제는 모든 시각의 경우를 하나씩 모두 세어 풀어야 하는 문제이다.
3이 하나라도 포함되어 있으면 시각을 1씩 증가시키면서 확인하면 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class J_4_2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int H = Integer.parseInt(br.readLine());
int cnt = 0;
for(int i = 0; i <= H; i++){
for(int j = 0; j < 60; j++){
for(int k = 0; k < 60; k++){
// 매 시각 안에 '3'이 포함되어 있다면 카운트 증가
if(check(i, j, k)){
cnt++;
}
}
}
}
System.out.println(cnt);
}
// 특정한 시각 안에 '3' 이 포함되어 있는지의 여부
public static boolean check(int H, int m, int s){
if(H % 10 == 3 || m / 10 == 3 || m % 10 ==3 || s / 10 == 3 || s % 10 ==3){
return true;
}
return false;
}
}
참고한 책 : 이것이 취업을 위한 코딩 테스트다 with 파이썬 by 나동빈
참고한 GitHub : https://github.com/ndb796/python-for-coding-test
참고한 강의 :
https://www.youtube.com/watch?v=2zjoKjt97vQ&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=2
'알고리즘' 카테고리의 다른 글
백준 - 1018 - 체스판 다시 칠하기 (1) | 2023.03.09 |
---|---|
백준 - 2231 - 분해합 (0) | 2023.03.08 |
이것이 취업을 위한 코딩테스트다 - 구현(1) (0) | 2023.03.07 |
이것이 취업을 위한 코딩테스트다 - 그리디(3) (0) | 2023.03.07 |
이것이 취업을 위한 코딩테스트다 - 그리디(2) (0) | 2023.03.06 |