[1978] 소수 찾기

해결 포인트

소수란... 1과 자기자신으로만 나울 수 있는 수를 말한다.

그럼 2부터 자기자신-1 까지 수를 돌리며 나눴을때 나머지를 확인하여 소수를 판별 한다는 것이 생각날것이다.

답안

a = int(input())
b = list(map(int,input().split()))
cnt = 0
def find(a):
  if(a<2):
    return False
  for i in range(2,a):
    if(a%i==0):
      return False
  return True
for j in b:
    if find(j):
        cnt += 1
print(cnt)

 

 

[2581] 소수

해결 포인트

이전 문제와 매우 유사하다.

range의 값을 조금 수정했고,

합은 sum

최솟값은 min을 이용하면 된다.

소수가 없을 경우까지 고려하여 구현했다.

답안

a = int(input())
b = int(input())
li = []
def find(v):
    if v < 2:
        return False
    for j in range(2,v):
        if v % j == 0:
            return False
    return True
for i in range(a,b+1):
    if find(i):
        li.append(i)
if len(li) != 0:
    print(sum(li))
    print(min(li))
else:
    print("-1")

[11653] 소인수분해

해결 포인트

소인수분해에 대해 수학적으로 우선 접근하여
로직을 생각해보자

답안

a = int(input())
b = 2
while a != 1:
    if a % b !=0:
        b += 1
    else:
        print(b)
        a = a/b

입력받은 a 값을 2로 나누어 나머지가 0일때 출력하고 그렇지 않다면 b를 +1시켜 다시 나눠 나머지를 확인한다.

나머지가 0이 돨때마다 a에는 a/b의 값을 다시 넣어줘야 한다.

 

[1929] 소수 구하기

해결 포인트

해당 문제는 시간 제한이 걸려있다.

아무리 머리를 쥐어짜도... 잘 생각이 안났고 sqrt 함수를 알게돠어 사용했다.

포문의 범위를 절반 이하로 줄여 시간 내에 해결 가능했다.

답안

import sys
import math
input = sys.stdin.readline()
a,b = map(int,input.split())
def find(v):
    if v < 2:
        return False
    for i in range(2,int(math.sqrt(v)+1)):
        if v % i == 0:
            return False
    return True
for j in range(a,b+1):
    if find(j):
        print(j)

import math가 필요하다.

기본 로직은 이전 문제들과 똑같으나...

for문 range를 살펴보면 math.sqrt(v)+1가 있다. 이는 정수 v의 제곱근을 수하는 함수이며

이를통해 for문 범위를 대폭 줄여 빠르게 계산이 가능하다.

 

점점 벽을 느끼고있다..

다시한번 기초문법을 공부할 예정이다...

오랜만에 파이썬을 공부했다..

물론 초반인 만큼 기초적인 문법만 공부했지만

현재 자바스크립트, HTML과 병행하여 공부중인 나에겐 머리속에서 짬뽕이 되는것같다.

그래서... 결국 파이썬 먼저 학습하려고 한다.

앞으로 온라인 강의는 잠시 내려두고 파이썬에만 집중할것이다.

 

파이썬 기본 적인 문법을 익히고 코딩테스트 예제를 풀어보았다.

 

백준 1330번 파이썬)

단순하게 두 수를 비교하는거다.... 문제를 읽는데 뭔가 찝찝했다...

첫째 줄에 A와 B가 주어진다. A와 B는 공백 한 칸으로 구분되어져 있다.

A와 B가 공백 한칸으로 구분되어있다라...

이런걸로 벌써 고민하는게 기분이 좋지 않았다.처음에는 A와 B 두번 input을 받아 해결하려 했지만 뭔가 아닌거같아 생각해보니...공백을 기준으로 두 값을 나눈다. 라는 생각이 들어 split을 생각했고 이를 가지고 다시 고민했다.

input을 받게 되면 기본적으로 문자형으로 받아진다.

그렇다면 필요한 처리 과정은 int형 변화와 공백으로 나누기..

map을 이용하여 만들었다.

A,B = map(int,input("정수 2개를 입력하시오").split())

두 값이 잘 처리 되었는지 확인해보자

print(A,B)

결과는 잘나왔다. 

A,B 값을 받고 처리하는것은 끝났다.

이제 이를 가지고 비교하는것을 해보자

if A>B:
    print(">")
elif A<B:
    print("<")
else:
    print("==")

아래 else 대신 elif A=B: 이렇게 해도되지만 더는 나올수 있는 경우의 수가 없기때문에 그냥 else로 처리하였다.

이로써 첫 백준 문제 성공!

 

인줄알고 제출했는데 틀렸다....

input 안 문자열 출력으로인해 데이터 초과를 한것같다....

A,B = map(int,input().split())

if A>B:
    print(">")
elif A<B:
    print("<")
else:
    print("==")

최종 답안이다...

까다롭구만....

+ Recent posts