[TIL] Flutter 9기 Day 12 알고리즘 문제 풀기 & 위젯 공부

현서·2025년 12월 9일

[TIL] Flutter 9기

목록 보기
24/65
post-thumbnail

📍 알고리즘 문제 풀기

🙋 가장 가까운 사람 찾기

문제 링크

* 문제
세 사람의 위치를 나타내는 정수 x, y, z가 주어진다:
x는 사람 1의 위치, y는 사람 2의 위치
z는 사람 3의 위치이며, 사람 3은 움직이지 않는다
사람 1과 사람 2는 동일한 속도로 사람 3 쪽으로 이동한다
누가 사람 3에게 먼저 도착하는지 판단하라:
사람 1이 먼저 도착하면 1 반환
사람 2가 먼저 도착하면 2 반환
동시에 도착하면 0 반환

* 예시 1:
Input: x = 2, y = 7, z = 4
Output: 1

* 설명:
사람 1은 위치 2에서 4까지 이동하면 2만큼 이동
사람 2는 위치 7에서 4까지 이동하면 3만큼 이동
사람 1이 더 빨리 도착하므로 결과는 1


* 예시 2:
Input: x = 2, y = 5, z = 6
Output: 2

* 설명:
사람 1은 위치 2에서 6까지 4만큼 이동
사람 2는 위치 5에서 6까지 1만큼 이동
사람 2가 더 빨리 도착하므로 결과는 2

* 예시 3:
Input: x = 1, y = 5, z = 3
Output: 0

* 설명:
사람 1은 위치 1에서 3까지 2만큼 이동
사람 2는 위치 5에서 3까지 2만큼 이동
두 사람 모두 동시에 도착하므로 결과는 0

* 제한 사항: 1 <= x, y, z <= 100

이 문제는 절댓값 구하는 방법을 알면 비교해서 0,1,2 중에 반환하면 된다.
절댓값 구하는 방법은 abs()를 사용해서 int a = -10일 경우 a.abs()) //10이 된다. 즉 음수는 양수, 양수는 그대로 유지해준다.

class Solution {
  int findClosest(int x, int y, int z) {
    int a = (z - x).abs();
    int b = (z - y).abs();

    if (a < b) {
      return 1;
    } else if (a > b) {
      return 2;
    } else {
      return 0;
    }
  }
}

그래서 z에 x랑 y의 차이를 비교한 후 제출했더니 성공~

📍 튜터님 Widget 공부

PageView

여러 페이지(위젯)를 좌우 또는 상하로 스와이프해서 넘기는 위젯

PageView(
  children: [
    Container(color: Colors.red),
    Container(color: Colors.green),
    Container(color: Colors.blue),
  ],
)

PageController 사용
페이지 이동, 초기 페이지 설정, 현재 페이지 값 얻는 데 사용

final _controller = PageController(initialPage: 0);

PageView(
  controller: _controller,
  children: [
    Page1(),
    Page2(),
    Page3(),
  ],
)

방향 변경

PageView(
  scrollDirection: Axis.vertical, // 세로 스크롤
  children: [...]
)

onPageChanged
현재 페이지 바뀔 때 호출

PageView(
  controller: _controller,
  onPageChanged: (index) {
    print("현재 페이지: $index");
  },
  children: [...]
)

AnimationController dispose

#무한스크롤 #깊은 복사 #얕은 복사

공부 소감

오늘은 기본 과제를 다 풀고 추가 도전 과제까지 완료했다 히히~ 내일 나만의 기능을 추가해 보고 어려웠던 부분, 튜터님께 물어본 부분 정리하면서 트러블 슈팅을 작성해봐야겠다.

0개의 댓글