220101 TIL

Donghun Ha·2022년 1월 1일
2

TIL

목록 보기
3/6
post-thumbnail
post-custom-banner

새해가 밝았다~ 일어나라~
더 열심히 코딩 해야지 🔥

BFS 4문제

문제문제 제목
2583영역 구하기
2667단지번호붙이기
5014스타트링크
2468안전 영역

DP에서 깎인 자존심을 BFS를 풀면서 회복하는 것 같아서 재미도 있고 기분도 좋다!

오늘은 마지막 문제를 제외하고는 지금까지 해결한 문제와 유사하여 크게 고민없이 해결했다.

  • 안전영역
    • 2583, 2667과 유사하게 영역을 구하는 문제였지만,
      비가 오는 높이 별로 영역의 개수를 구하여, 최대 값을 출력해야하는 차이점이 있다.

    • 처음에는 높이의 최대 값인 100까지 반복문을 돌릴까 고민했지만,
      입력을 받을 때, 최대 높이만 업데이트를 해주면 반복 횟수를 크게 줄일 수 있다.

    • 문제를 1회 틀렸는데, 비가 오지 않는 즉 높이가 0인 경우의 케이스를 생각하지 못했다.
      높이의 범위가 1 ≤ 높이 ≤ 100 라, 1부터 시작했는데 예외 케이스를 더 잘 생각해봐야겠다.

      // BFS 함수는 기본 형식과 유사하여 생락한다.
      
      int main() {
          ios::sync_with_stdio(0); cin.tie(0);
          cin >> n;
          for (int i = 0; i < n; i++)
              for (int j = 0; j < n; j++) {
                  cin >> board[i][j];
      						// 최대 높이를 입력과 함께 업데이트 해준다.
                  maxtall = max(maxtall, board[i][j]);
              }
          
      		// 여기서 i를 1부터 시작했다.
      		// 0부터 최대 높이 - 1 까지 영역을 확인하고, 최댓값을 res에 넣는다.
          for (int i = 0; i < maxtall; i++) {
              for (int j = 0; j < 101; j++)
                  fill(v[j], v[j] + 101, 0);
              
              int cnt = 0;
              for (int j = 0; j < n; j++) {
                  for (int k = 0; k < n; k++) {
                      if (v[j][k] != 1 && board[j][k] > i) {
                          q.push({j, k});
                          v[j][k] = 1;
                          cnt++;
                          BFS(i);
                      }
                  }
              }
              res = max(res, cnt);
          }
      }

invoke와 call의 차이

Go 를 공부하는 중에 강의에서 아래 사진의 문구를 발견했다.

내 머리 속에 함수는 Call(호출)하는 건데, 왜 Invoke(명사형 invocation)이라고 표현했을까? 라는 생각과 함께 검색 시작

이거 맞나....? 사전이 안 도와주니 스택 오버플로우로 달려간다.

출처: https://stackoverflow.com/questions/50884893/calling-vs-invoking-a-function

두 번째로 추천을 많이 받은 답변을 보면,(첫 번째 답변은 JS 기준의 답변으로 보인다.)

이는 아주 미묘한 개념의 차이가 있다고 한다.

답변에 따르면

  • Call: 직접적으로 함수를 실행 시키도록 하는 행위
    (When you call a function, you are directly telling it to run.)
  • Invoke: 다른 것(함수)를 통해서 함수를 실행 시키도록 하는 행위
    (When you invoke a function, you are letting something run it.

예시)

func invokeFunc(callFunc func()) {
	callFunc()
}

invokeFunc(myFunc)
// 위와 같은 행위가 인보크이다!
profile
Corca Backend Engineer, dha
post-custom-banner

0개의 댓글