목록Python (281)
jyamethyst21 님의 블로그
문제: 해당 문제는 세 개의 좌표를 받은 뒤 남은 한 좌표를 찾는 문제이다. 이때 직사각형이 되도록 평행이 되는 점을 찾아야 한다.헷갈렸던 건 평행이 되게 하면 되는데 이걸 어떤 규칙으로 코드로 짜야 하는지에 대한 것이었다. 헷갈려서 그림을 그려보았다.그림과 같이 노란색 점을 찾으면 되는데 갈색 좌표를 보면 각각의 점이 이어지는 것을 확인할 수 있다. 예를 들어 (5,7)은 아래 (5,5)에서 x좌표가 동일하고 (5,5)는 그 옆 (7,5)에서 y좌표가 동일하다. 그렇다면 노란점은 어떨까?(7,5)를 기준으로 x좌표가 동일하고 (5,7) 기준으로 y좌표가 동일하다. 즉, 남은 한 점은 기존에 존재하는 점과 이어지게 만들면 된다. 그러려면 기존 좌표는 이미 짝이 존재하기 때문에 짝이 없는 숫자 즉, 빈도수..
문제: 처음에 문제 이해가 잘 가지 않아서 이해하는데 시간이 좀 걸렸다.나처럼 이해가 어려웠던 분들을 위해 솜씨없지만 그림을 그려보았다. 문제에서는 x,y,w,h값을 순서대로 입력받는다. 그 후 (x,y) 위치를 기준으로 노란색 줄 부분의 길이를 거쳐 파란색 변에 닿을 수 있는 경우의 수 중 가장 짧은 거리인 것을 구하라는 문제이다. 이렇게 그림을 그리면 바로 풀 수 있다. 풀이:x,y,w,h=map(int,input().split())print(min(x,y,h-y,w-x))코드를 보다시피 엄청 단순하다.입력받는 부분은 설명을 생략하고, 그림에서 보다시피 노란색 줄 부분 중 가장 작은 수를 구하면 되기 때문에 min 함수를 활용하였다. 노란색 부분은 다음과 같다.1. x의 길이, 2. y의 길이, 3...
문제: 문제를 보면 뭘 해야하는지 직관적으로 이해할 수 있다. 각 조건에 맞게 코드를 짜면 되는 거라 그리 어려운 문제는 아니었다. 풀이:a=int(input())b=int(input())c=int(input())if a==b==c==60: print('Equilateral')elif a+b+c==180 and (a==b or a==c or b==c): print('Isosceles')elif a+b+c==180 and (a!=b or a!=c or b!=c): print('Scalene')else: print('Error') if문을 여러개 써서 각 조건에 맞게 코드를 작성하면 된다. 주의할 점은 or 부분에 괄호를 넣어야한다는 점이다. 안 넣으면 조건에 맞는 출력이 안된다. 이것..
문제: 처음 문제를 보면 어렵게 느껴질 수 있는데 규칙만 찾으면 간단하게 풀 수 있다.초기 상태에는 점이 무조건 네개이다. 나는 이걸 전체 개수로 보지 않고 가로 수 기준으로 보았다. 어차피 정사각형이니 세로 개수는 제곱만 해주면 되어서 규칙을 찾기 위해 가로 수만 보았다. 가로 한 변의 점 개수는 2개이다. (초기 규칙)그 다음 한번 알고리즘이 동작하게 되면 가로 한 변의 점 개수는 3개, 두번 돌면 5개가 된다.이를 식 형태의 규칙으로 바꾼 뒤 코드로 작성하면 다음과 같다. 풀이:a=int(input())print((2**a+1)**2)처음 안쪽 괄호는 한 변의 개수를 찾는 규칙이고 바깥쪽 괄호는 가로*세로의 개수를 구하기 위해 만든 식이다.다시 한번 살펴보면, 2는 초기 개수이다. 여기서 사용자로부..
문제: 해당 문제는 입력 받은 수를 소인수분해하고 각 라인에 어떤 수로 나누었는지 출력하라는 문제이다. 풀이:a=int(input())while(a!=1): for i in range(2,a+1): if a % i == 0: print(i) a = a//i break초기 코드이다. 비쥬얼스튜디오 돌렸을 땐 이상 없이 잘 되어서 제출했는데 계속 시간 초과가 나서 푸는데 오래 걸렸다..for문 돌 때 범위가 넓어서 그런가 싶어 좀 더 줄여서 해보았는데도 해결이 안됐다.a = int(input())i = 2while i * i 1: print(a)어떻게 해도 해결이 잘 안되어서 서치를 통해 풀었다.핵심 아이디어는 다음과 같다...
문제: 해당 문제는 두 수를 입력받고 두 값 사이에서 소수를 찾아 전부 더한 값과 가장 최솟값을 출력하는 문제이다. 풀이:a=int(input())b=int(input())k=[]for i in range(a,b+1): num=0 for j in range(1,i+1): if i % j == 0: num+=1 if num == 2: k.append(i)if k: print(sum(k)) print(min(k))else: print(-1)초기 답안은 이렇게 작성하였다. 비쥬얼스튜디오에서 실행 시 이상없이 잘 출력이 되었는데 백준에서는 자꾸 시간초과가 발생하였다.우선 어제 업로드한 문제에서 num 변수를 받아 이 값이 2인 수를 약..
문제: 약수가 자기 자신과 1, 이렇게 두개뿐인걸 소수라고 하는데 해당 문제는 소수의 개수를 찾는 코드를 작성하는 문제이다.최근 푼 문제 중에 가장 헷갈렸다.. (너무 어렵게 생각했기 때문....) 풀이: a=int(input())k=[]count=0n=input().split()for i in range(a): k.append(int(n[i]))for j in k: num=0 for q in range(1, j+1): if j % q == 0: num+=1 if num == 2: count+=1print(count)코드는 위와 같다. 우선 문제의 핵심은 소수를 정의하는 부분이다. 소수의 의미는 앞서 말한 것처럼 자기 자신과 1 ,이렇게 ..
문제: 풀이:완전수를 구하는 문제이다. 예제처럼 출력되게 만드는 게 급 헷갈려서 헤멨다.. 항상 비쥬얼스튜디오로 먼저 돌려보고 답안을 제출하는데 아래와 같이 코드를 작성하고 실행했을 때 이상 없어서 백준에 올렸더니 틀렸다고 떠서 고민을 많이 했다.. a=int(input())k=[]q=0for i in range(1,a): if a % i == 0: k.append(i)q=sum(k)if q==a: print(f"{a} = ", end="") print(" + ".join(map(str,k)))else: print(f"{a} is NOT perfect.") 사람은 역시나 같은 실수를 반복한다고.. -1 을 입력 받았을 때 종료되는 처리를 반영하지 않아서 틀린거였다.아래..
문제:문제는 위와 같다. 약수를 계산한 뒤에 두번째로 입력받은 수만큼 작은 수를 출력해주는 프로그램이다. 문제만 딱 읽고 나서는 쉽다고 생각해서 코드를 써내려갔다. k=[]a,b=map(int,input().split())for i in range(1,a+1): if a % i == 0: k.append(i)sorted_number=sorted(k)print(sorted_number[b-1])그런데 이상하게도 런타임 에러가 났다. 알고보니 a의 약수 개수가 b보다 작은 경우를 생각해야 한다는 것을 꺠달았다..수정코드는 다음과 같다. 답:k=[]a,b=map(int,input().split())for i in range(1,a+1): if a % i == 0: k.app..
문제: 풀이:while True: a,b=map(int,input().split()) if a == 0 and b == 0: break if b % a == 0: print("factor") elif a % b == 0: print("multiple") else: print("neither") 이번 문제는 쉬운 편이었다. 문제 그대로 두 수를 입력받고, 수의 관계(약수, 배수, none)를 알아보는 코드이다.다만.. 이전 게시글의 날짜를 보면 알다시피 최근 프로젝트의 여파로 잠시 파이썬 코딩을 쉬고 있었던터라 C언어와 혼동해서 약간의 실수는 있었다. 그래도 이전 감각으로 곧바로 수정해서 제출했다.아, 배수 부분에서 순간 헷갈렸던..
