2024. 12. 7. 13:48ㆍAlgorithms/백준알고리즘 연습
27323번 직사각형 넓이 구하기
초기 코드
a,b = map(int,input().split())
print(a*b)
value error 가 뜬다
a = int(input())
b = int(input())
print(a*b)
너무 자동적으로 인풋을 잘못받아옴
1085 직사각형에서 탈출
초기 코드 - 주피터로 돌리면 답이 나오나, 백준에서는 틀렸다고 함
x,y,w,h = map(int,input().split())
if w-x > h-y:
print(h-y)
else :
print(w-x)
왜지 ?
다른건 맞는데
예제 입력 4 복사
161 181 762 375
예제 출력 4 복사
161
얘가 안나옴
다른분 답안
x,y,w,h=map(int,input().split())
print(min(x,y,w-x,h-y))
- 직사각형의 경계선만 닿으면 되기때문에 직사각형의 영역인 (0,0)~(w,h) 영역안에서 고려하면 된다.
- 직사각형의 영역안에서 x,y,w-x,h-y를 중 최소값을 구해주면 된다
왔던 161을 다시 갈 수도 있음
3009번 네번째 점
네 번째 점 다국어
1 초 | 128 MB | 65083 | 47286 | 42363 | 73.451% |
문제
세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.
입력
세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.
출력
직사각형의 네 번째 점의 좌표를 출력한다.
예제 입력 1 복사
5 5
5 7
7 5
예제 출력 1 복사
7 7
예제 입력 2 복사
30 20
10 10
10 20
예제 출력 2 복사
30 10
초기 코드
x_list = []
y_list = []
for _ in range(3):
x, y = map(int, input().split())
x_list.append(x)
y_list.append(y)
if x_list.count(x_list[0]) == 2:
newx_List = [x for x in x_list if x != x_list[0]]
else :
newx_List =[x for x in x_list if x == x_list[0]]
if y_list.count(y_list[0]== 2:
newy_List = [y for y in y_list if x != y_list[0]]
else :
newy_List =[y for y in y_list if x == y_list[0]]
print(newx_List[0], newy_List[0])
카운트가 2번 나오면, 그 숫자가 아닌 다른 숫자를 newx_List에 저장하고 뽑는 방법
gpt 가 고쳐준 코드
x_list = []
y_list = []
# Input the points
for _ in range(3):
x, y = map(int, input().split())
x_list.append(x)
y_list.append(y)
# Find the unique x value
if x_list.count(x_list[0]) == 1:
unique_x = x_list[0]
else:
unique_x = [x for x in x_list if x_list.count(x) == 1][0]
# Find the unique y value
if y_list.count(y_list[0]) == 1:
unique_y = y_list[0]
else:
unique_y = [y for y in y_list if y_list.count(y) == 1][0]
# Print the unique point
print(unique_x, unique_y)
반복분으로 더 짧게 작성한 다른 코드
int[] answer = new int[2];
for(int i=0;i<answer.length;i++){
if(v[0][i]==v[1][i]){
answer[i] = v[2][i];
}else if(v[0][i]==v[2][i]){
answer[i] = v[1][i];
}else if(v[1][i]==v[2][i]){
answer[i] = v[0][i];
}
}
return answer;
비트연산자를 이용해 최단시간으로 푸는분
answer[0] = v[0][0]^v[1][0]^v[2][0];
answer[1] = v[0][1]^v[1][1]^v[2][1];
return answer;
XOR 연산을 활용함
XOR연산은 두 수가 같으면 같은 값을, 다르면 다른값을 반환
A | B | A ^ B |
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
9063번
대지
로직 : x max - x min * y max - y min 해주어야 함
좌표가 negative도 나온다고 해서 absolute로 바꾸어서 풀어주려고 한건데
시간복잡도가 문제인지 시간초과되어서 종료됨
n = int(input())
x_list = []
y_list =[]
for _ in range(n):
x, y = map(int, input().split())
x_list.append(x)
x_list = [abs(x) for x in x_list]
y_list.append(y)
y_list = [abs(x) for y in y_list]
print((max(x_list)-min(x_list))*(max(y_list)-min(y_list)))
list로 하나씩 빼오는 것은 데이터 숫자가 많을때는 시간 복잡도를 증가시킴
perplexity 가 optimize 해준 코드
n = int(input())
x_min, x_max = float('inf'), float('-inf')
y_min, y_max = float('inf'), float('-inf')
for _ in range(n):
x, y = map(int, input().split())
x_min = min(x_min, x)
x_max = max(x_max, x)
y_min = min(y_min, y)
y_max = max(y_max, y)
area = (x_max - x_min) * (y_max - y_min)
print(area)
이 코드에서는 x,y 값중에 min max 만 데려옴
y_min, y_max = float('inf'), float('-inf')
- float('inf') represents positive infinity. It's used for x_min and y_min so that any real number will be smaller than this initial value.
- float('-inf') represents negative infinity. It's used for x_max and y_max so that any real number will be larger than this initial value.
삼각형 외우기 다국어
1 초 | 256 MB | 49943 | 27043 | 24844 | 56.749% |
문제
창영이는 삼각형의 종류를 잘 구분하지 못한다. 따라서 프로그램을 이용해 이를 외우려고 한다.
삼각형의 세 각을 입력받은 다음,
- 세 각의 크기가 모두 60이면, Equilateral
- 세 각의 합이 180이고, 두 각이 같은 경우에는 Isosceles
- 세 각의 합이 180이고, 같은 각이 없는 경우에는 Scalene
- 세 각의 합이 180이 아닌 경우에는 Error
를 출력하는 프로그램을 작성하시오.
입력
총 3개의 줄에 걸쳐 삼각형의 각의 크기가 주어진다. 모든 정수는 0보다 크고, 180보다 작다.
출력
문제의 설명에 따라 Equilateral, Isosceles, Scalene, Error 중 하나를 출력한다.
예제 입력 1 복사
60
70
50
예제 출력 1 복사
Scalene
초기 코드
a = int(input())
b = int(input())
c = int(input())
a_list = []
a_list = a_list[a,b,c]
for i in a_lists:
if sum(a_list) == 180 :
if count[i] > 2 :
print('Equilateral')
elif count[i] == 2 :
print('Isosceles')
elif count[i]==1 :
print('Scalene')
else :
print('Error')
perplexity 가 잡아준 코드
5073번
삼각형과 세 변 다국어
for i in range(5):
a,b,c = map(int,input().split())
while a !=0:
if a == b and b == c:
print('Equilateral')
elif a == b and b !=c :
print('Isosceles')
elif a !=b and b == c:
print('Isosceles')
elif a == c and b != c:
print('Isosceles')
elif a != c and b != c and a !=b:
print('Scalene')
else :
print('Invalid')
break
while True:
a, b, c = map(int, input().split())
if a == 0 and b == 0 and c == 0:
break # Exit the loop if all sides are 0
if max(a, b, c) >= a + b + c - max(a, b, c):
print('Invalid')
elif a == b == c:
print('Equilateral')
elif (a == b and b != c) or (b == c and c != a) or (a == c and c != b):
print('Isosceles')
else:
print('Scalene')
'Algorithms > 백준알고리즘 연습' 카테고리의 다른 글
백준 부루트 포스 (복습 필요) (2) | 2024.12.09 |
---|---|
백준 시간복잡도 (0) | 2024.12.07 |
백준 (1) | 2024.12.05 |
백준 알고리즘 연습 : 약수, 배수와 소수 (0) | 2024.12.04 |
백준 일반 수학 1 (0) | 2024.12.04 |