해결된 질문
작성
·
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] 값 그대로를 출력합니다. 즉, 경로가 있으면 그 경로의 거리를 출력합니다.
감사합니다.