이번 문제는 아래 링크에서 풀어볼 수 있습니다.
1978번: 소수 찾기
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
www.acmicpc.net
문제
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
입력
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
출력
주어진 수들 중 소수의 개수를 출력한다.
예제 입력 1
4
1 3 5 7
예제 출력 1
3
정답 코드
나의 답안
파이썬 Ver.
import sys n = int(sys.stdin.readline().rstrip()) nums = list(map(int, sys.stdin.readline().rstrip().split())) def mySolution(n, nums): result = 0 for num in nums: if num != 2 and num % 2 == 0: continue cnt = 0 for i in range(1, num + 1): if num % i == 0: cnt += 1 if cnt == 2: result += 1 return result print("mySolution", mySolution(n, nums))
자바스크립트/NodeJS Ver.const fs = require('fs'); const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt'; let input = fs.readFileSync(filePath).toString().trim().split('\n'); const n = parseInt(input[0]); const data = input .splice(1)[0] .split(' ') .map((val) => parseInt(val)); const mySolution = (n, nums) => { result = 0; for (let num of nums) { if (num !== 2 && num % 2 === 0) continue; let cnt = 0; for (let i = 1; i <= num; i++) { if (num % i === 0) cnt++; } if (cnt === 2) result++; } return result; }; console.log('mySolution', mySolution(n, data));
답안 1
파이썬 Ver.
import sys n = int(sys.stdin.readline().rstrip()) nums = list(map(int, sys.stdin.readline().rstrip().split())) def answer1(n, nums): result = 0 for num in nums: if num == 1: continue cnt = 0 for i in range(2, num): if num % i == 0: cnt += 1 if cnt == 0: result += 1 return result print("answer1", answer1(n, nums))
자바스크립트/NodeJS Ver.const fs = require('fs'); const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt'; let input = fs.readFileSync(filePath).toString().trim().split('\n'); const n = parseInt(input[0]); const data = input .splice(1)[0] .split(' ') .map((val) => parseInt(val)); const answer1 = (n, nums) => { let result = 0; for (let num of nums) { if (num == 1) continue; let cnt = 0; for (let i = 2; i < num; i++) { if (num % i === 0) cnt++; } if (cnt === 0) result++; } return result; }; console.log('answer1', answer1(n, data));
답안 2
파이썬 Ver.
import sys n = int(sys.stdin.readline().rstrip()) nums = list(map(int, sys.stdin.readline().rstrip().split())) def answer2(n, nums): def is_prime(num): if num == 1: return False elif num == 2: return True for i in range(2, num): if num % i == 0: return False return True result = 0 for num in nums: if is_prime(num): result += 1 return result print("answer2", answer2(n, nums))
자바스크립트/NodeJS Ver.const fs = require('fs'); const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt'; let input = fs.readFileSync(filePath).toString().trim().split('\n'); const n = parseInt(input[0]); const data = input .splice(1)[0] .split(' ') .map((val) => parseInt(val)); const answer2 = (n, nums) => { const isPrime = (num) => { if (num === 1) return false; else if (num === 2) return true; for (let i = 2; i < num; i++) { if (num % i === 0) return false; } return true; }; let result = 0; for (let num of nums) { if (isPrime(num)) result++; } return result; }; console.log('answer2', answer2(n, data));
답안3
파이썬 Ver.
import sys n = int(sys.stdin.readline().rstrip()) nums = list(map(int, sys.stdin.readline().rstrip().split())) def answer3(n, nums): result = 0 for num in nums: for i in range(2, num + 1): if num % i == 0: if num == i: result += 1 break return result print("answer3", answer3(n, nums))
자바스크립트/NodeJS Ver.const fs = require('fs'); const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt'; let input = fs.readFileSync(filePath).toString().trim().split('\n'); const n = parseInt(input[0]); const data = input .splice(1)[0] .split(' ') .map((val) => parseInt(val)); const answer3 = (n, nums) => { let result = 0; for (let num of nums) { for (let i = 2; i <= num; i++) { if (num % i === 0) { if (num === i) result++; break; } } } return result; }; console.log('answer3', answer3(n, data));
문제 풀이
소수란 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수다. 그러면서 홀수이고, 소수 중 유일한 짝수는 2이다.
나의 경우 이러한 점에서 착안하여 입력 받은 숫자 중 탐색하는 숫자가 2가 아닌 짝수일 경우 continue를 통해 다음 수로 넘겼다. 그런 다음 for 반복문으로 1부터 num까지 순회하며 num과 i를 나눠 나머지가 0일 경우, 즉 두 수가 나눠 떨어질 경우 cnt를 1씩 증가시켰다. 최종적으로 cnt가 2라면 1부터 num까지 수 중 num과 나눠 떨어지는 수가 1과 num 자기 자신밖에 없다는 뜻이므로 결괏값을 1씩 증가시키는 방식으로 코드를 짰다.
나머지 코드들도 소수의 정의에 부합하게끔 코드를 작성한 것들이므로 잘 살펴보길 바란다.
https://pacific-ocean.tistory.com/46
백준 알고리즘 1978번(python 파이썬)
문제 링크: https://www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net n = int(input()
pacific-ocean.tistory.com
https://seongonion.tistory.com/39
[백준] 1978번 소수 찾기 - 파이썬(Python)
문제 (링크) https://www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 나의 풀이
seongonion.tistory.com
'👩💻 Programming > Coding Test 문제 풀이' 카테고리의 다른 글
[Baekjoon] 6588 골드바흐의 추측(파이썬/자바스크립트/NodeJS) (0) | 2023.01.02 |
---|---|
[Baekjoon] 1929 소수 구하기(에라토스테네스의 체)(파이썬/자바스크립트/NodeJS) (0) | 2023.01.01 |
[Baekjoon] 1934 최소공배수(파이썬/자바스크립트/NodeJS) (0) | 2022.12.31 |
[Baekjoon] 2609 최대공약수와 최소공배수(파이썬/자바스크립트/NodeJS) (0) | 2022.12.31 |
[Baekjoon] 11656 접미사 배열(파이썬/자바스크립트/NodeJS) (0) | 2022.12.30 |
댓글