일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
31 |
- Python
- 코딩도장
- Database
- Resnet
- LINUX MASTER
- GoogleDrive
- rnn
- cloud
- OSS
- ChatGPT
- suricata
- KAKAO
- C언어
- git
- 국가과제
- Web
- 인터넷의이해
- VSCode
- Spring
- Machine Learning
- Github
- 크롤링 개발
- ICT멘토링
- API
- colab
- Docker
- 고등학생 대상
- Powershell
- Rocky Linux
- Spring Boot
- Today
- Total
코딩두의 포트폴리오
[BAEKJOON 1463] 1로 만들기 본문
소수 찾기
2 초 | 128 MB | 203068 | 96061 | 76868 | 47.173% |
문제
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
입력
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
출력
주어진 수들 중 소수의 개수를 출력한다.
예제 입력 1 복사
4
1 3 5 7
예제 출력 1 복사
3
# 작성한 코드
숫자 n 입력받고
n+1 크기의 리스트 d를 생성 / 모든 요소 0으로 초기화
2부터 n까지 반복함 / 1은 연산을 필요로 하지 않기 때문에 2부터 시작
숫자 i가 3으로 나눠떨어질 때,
나눈 후 숫자 i//3을 1로 만들기 위한 '최소 연산 횟수+1'과 '최소 연산 횟수' 중 더 잓은 값 채택!
숫자 i가 2로 나눠떨어질 때,
나눈 후 숫자 i//2을 1로 만들기 위한 '최소 연산 횟수+1'과 '최소 연산 횟수' 중 더 잓은 값 채택!
n을 1로 만들기 위한 최소 연산 횟수 출력
# if n = 55
초기 숫자는 55
1. 첫 번째 연산으로 55에서 1을 빼면 54 -> 연산 횟수 1회
2. 54는 3으로 나눠 떨어지므로 54를 3으로 나눠 18을 만듦 -> 연산 횟수 2회
3. 18 역시 3으로 나눠 떨어지므로 18을 3으로 나눠 6을 만듦 -> 연산 횟수 3회
4. 6을 3으로 나누면 2 -> 연산 횟수 4회
5. 2를 2로 나누면 1 -> 연산 횟수 5회
55 -> 54 -> 18 -> 6 -> 2-> 1
따라서, 초기값 55를 1로 만들기 위한 최소 연산 횟수는 '5'회가 된다.
* 다이나믹 프로그래밍 사용 이유: 각 단계에서 최적의 결정(이 문제에서는 최소 연산 횟수)를 기록하고
이를 바탕으로 다음 단계의 최적 결과를 도출할 수 있다.
# 최종 코드
위 코드는 다이나믹 프로그래밍으로 접근하여 풀었음
'Algorithm > BAEKJOON' 카테고리의 다른 글
[BAEKJOON 2501] 약수 구하기 (3) | 2024.12.20 |
---|---|
[BAEKJOON 9012] 괄호 - 추후수정 (1) | 2024.03.27 |