인프런 커뮤니티 질문&답변

한유태님의 프로필 이미지
한유태

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

8주차 개념 #1. 펜윅트리(Fenwick Tree)

너무 기본적인 개념 질문드려서 죄송합니다.. ㅠㅠ

해결된 질문

작성

·

48

0

안녕하세요 선생님 🙂

플로이드 와샬 개념문제로 11404번 문제를 풀다가 갑자기 삼항연산자의 개념이 헷갈려졌습니다 ㅠㅠ 구글링해도 기본적인 설명만 있고, 교안도 삼항 연산자 관련 내용이 없어서 질문 드립니다..

 

http://boj.kr/eefe3db0d7aa4338bfffb83a6233db67

 

// 입력 부분
dist[a][b] = INF ? min(dist[a][b], c) : c;

// 출력 부분
else cout << (dist[i][j] == INF ? 0 : dist[i][j]) << " ";

 

입력 부분에 ==가 아닌 =가 들어가는 이유를 모르겠습니다. 또, = 대신 ==를 넣으면 안되는 이유를 모르겠습니다.

 

제가 아는 삼항 연산자는

if (dist[i][j] == INF) 라는 조건을 만족하면 dist[i][j]가 왼쪽이 되고, 만족하지 않으면 dist[i][j]가 오른쪽이 되는 것을 한 줄로 요약한 코드라고 알고 있습니다.

개념이 심하게 헷갈리네요 ㅠㅠ 알려주시면 감사하겠습니다..!!

답변 1

1

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 유태님 ㅎㅎ

입력 부분에 ==가 아닌 =가 들어가는 이유를 모르겠습니다. 또, = 대신 ==를 넣으면 안되는 이유를 모르겠습니다.

-> 배열에 값을 할당하기 위해 = 이 들어갑니다. ==은 비교할 때만 쓴다고 생각하시면 됩니다.

 

입력 부분: dist[a][b] = INF ? min(dist[a][b], c) : c;

-> dist[a][b]가 INF 라면 dist[a][b]와 c 중 작은 값을 선택하여 dist[a][b]에 할당합니다. 그게 아니라면 c를 할당합니다.

 

출력 부분: else cout << (dist[i][j] == INF ? 0 : dist[i][j]) << " ";

-> 이 코드는 결과를 출력하는 부분입니다. dist[i][j] == INF라는 조건을 확인하여, 두 노드 i와 j 사이에 경로가 없는 경우 0을 출력합니다. (경로가 없는 경우, INF 대신에 의미 있는 값으로 0을 출력하는 것입니다.) dist[i][j] != INF인 경우는, dist[i][j] 값 그대로를 출력합니다. 즉, 경로가 있으면 그 경로의 거리를 출력합니다.

 

감사합니다.

한유태님의 프로필 이미지
한유태

작성한 질문수

질문하기