BOJ1069 집으로

2025. 10. 4. 16:57·공부/알고리즘(PS)
 

아이디어


사실 접근 자체는 어렵지 않았다. 일단 원점부터 주어진 좌표까지의 거리를 double로 저장해두고 최대한 점프로 거리를 좁힌 후에 특정 범위에 다다랐을 때 조건분기로 걸린 시간을 구해내겠다는, 단순하지만 해답에 거의 가까운 발상이였다. 조건분기로는 세 가지 경우를 고려했다.

  1. 점프 두 번
  2. 점프 한 번 + 걸어서
  3. 그냥 걸어서

하지만 이걸 조건문으로 돌리려니 어떻게 조건을 걸어야할지 참 막막했고 그냥 MIN을 써서 최소값을 구하는 방식으로 구현했다. 그리고 빼먹은 경우가 있었는데 바로 점프를 어떻게 사용하던 애초에 걷는 속도보다 느린 경우다. 이걸 나중에 알아내서 조건을 추가해줬다.

해답


#include <bits/stdc++.h>
using namespace std;

int main() {
    double answer = 0;

    int x, y, d, t;
    cin >> x >> y >> d >> t;

    double remain = sqrt(x * x + y * y);
    if ((double)d / t < 1.0)
        answer = remain;
    else {
        while (true) {
            if (abs(remain) < d * 2) {
                answer += min(min((double)t * 2, abs(remain)), t + abs(remain - d));
                break;
            }
            remain -= d;
            answer += t;
        }
    }

    cout.precision(12);
    cout << fixed << answer;

    return 0;
}
 

'공부 > 알고리즘(PS)' 카테고리의 다른 글

BOJ1463 1로 만들기  (0) 2025.10.05
BOJ1334 다음 팰린드롬 수  (0) 2025.10.04
BOJ17298 오큰수  (0) 2025.09.22
알고리즘 카테고리를 만들며  (0) 2025.09.21
'공부/알고리즘(PS)' 카테고리의 다른 글
  • BOJ1463 1로 만들기
  • BOJ1334 다음 팰린드롬 수
  • BOJ17298 오큰수
  • 알고리즘 카테고리를 만들며
ayuriK152
ayuriK152
주로 게임 클라이언트 개발 공부를 해요 상용엔진이나 알고리즘 포스팅도 해요
  • ayuriK152
    아유릭공방
    ayuriK152
  • 전체
    오늘
    어제
    • 분류 전체보기 (24)
      • 공부 (19)
        • DirectX12 (11)
        • 유니티 (2)
        • 알고리즘(PS) (5)
      • 게임 (0)
        • 후기 (0)
      • 프로젝트 (5)
        • 리듬게임 프로젝트 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
ayuriK152
BOJ1069 집으로
상단으로

티스토리툴바