본문 바로가기
알고리즘 문제 풀이

[백준 26517] 연속인가? ? - python, js

by 진!!!!! 2025. 1. 2.

https://www.acmicpc.net/problem/26517

💡문제 분석 요약

💡알고리즘 설계

ax+b == cx+d 일 경우 Yes와 f(x)를 출력한다.

아닐 경우 No를 출력한다.

함수의 연속성에 대한 설명

함수 f(x)가 특정 점 x=t에서 연속이라는 것은 다음 세 가지 조건을 만족하는 경우를 의미한다.

  1. f(t)가 정의되어 있어야 한다.
  2. lim⁡x→tf(x)가 존재해야 한다.
  3. lim⁡x→tf(x)=f(t)이어야 한다.

즉, x=t에서 함수값과 극한값이 모두 존재하며, 그 값이 서로 같을 때 f(x)는 x=t에서 연속이라고 한다.

 

예시 입력에서 k=2, a=6, b=2, c=5, d=4,일 때 그래프이다.

 

예시 입력에서 k=-7, a=-9 b=-6 c=-7 d=-8일 때, 함수의 비연속성을 보여주는 그래프이다.

 

gpt시켜서 그래프 그려달라하니까 더 그리려면 유료결제 하라길래 그냥 파이썬 코드 만들어달라고 하고 colab에서 돌려서 만들었다 ㅎㅎ; 앞으로도 그냥 gpt한테는 코드만 짜달라고 하고 그래프는 직접 그리는게 나을 것 같다.

💡코드

x = int(input())
a,b, c, d = map(int, input().split())

if a*x+b==c*x+d:
    print('Yes', a*x+b)
else:
    print('No')
const readline = require("readline");

(async () => {
  let rl = readline.createInterface({ input: process.stdin });
  let counter = 1;
  for await (const line of rl) {
    if (counter == 1) {
      x = Number(line);
      counter--;
    } else {
      [a, b, c, d] = line.split(" ").map(Number);
      rl.close();
    }
  }

  if (a * x + b == c * x + d) console.log("Yes", a * x + b);
  else console.log("No");
})();

 

💡 느낀점 or 기억할 정보

함수의 연속성에 대해 기억하고 있으면 풀 수 있는 문제이다.

고등학생 시절 미적분을 배웠던 기억이 아직도 남아있다니.. ㄷㄷ

아래는 그래프 만들 때 썼던 파이썬 코드다.

import numpy as np
import matplotlib.pyplot as plt

# Define the piecewise function
def f_left(x, a, b):  # For x <= k
    return a * x + b

def f_right(x, c, d):  # For x > k
    return c * x + d

# Define parameters
k = -7
a = -9
b = -6
c = -7
d = -8

# Define the range of x
x_left = np.linspace(-17, k, 250)  # x <= k
x_right = np.linspace(k, 3, 250)  # x > k

# Compute the function values
y_left = f_left(x_left, a, b)
y_right = f_right(x_right, c, d)

# Plot the function
plt.figure(figsize=(8, 6))

# Plot the left and right parts of the function
plt.plot(x_left, y_left, label="f(x) = ax + b (x <= k)", color="blue")
plt.plot(x_right, y_right, label="f(x) = cx + d (x > k)", color="green")

# Mark the critical point at x = k
plt.scatter(k, f_left(k, a, b), color="red", label="ax + b at x = k", zorder=5)  # Filled red dot
plt.scatter(k, f_right(k, c, d), facecolors='none', edgecolors='red', label="cx + d at x = k", zorder=5)  # Unfilled red dot

# Add labels and legend
plt.axvline(k, color="gray", linestyle="--", linewidth=0.8, label="x = k")
plt.title("Graph of f(x) with discontinuity at x = k")
plt.xlabel("x")
plt.ylabel("f(x)")
plt.legend()
plt.grid(True)
plt.show()

gpt는 그래프 그릴 때 파이썬으로 그리고 클로드는 html로 그려서 퀄리티는 확실히 gpt가 나은 것 같다.

클로드는 웹개발 용으로만 쓰는걸로…