C 프로그래밍 과제가 있었습니다.
그냥 저는 기본적인 제어문(if, while combine)을 이용하여 작성하였습니다.

그저 for, while문과 같은 기본적인 제어문을 학습하는 정도의 과제였는데요.
문제의 근원은 아래의 문제였습니다.
사용자로부터 하나의 정수값을 입력받아서 그 수가 음수면 0이 될 때까지 1씩 증가시키면서 값을 한 줄에 하나씩 출력하고, 입력받은 수가 양수면 0이 될 때까지 1씩 감소시키면서 값을 한 줄에 하나씩 출력시키는 프로그램을 작성하시오.
...음....
제가 코딩하는걸 보고 심심해 하시던 분이!
아래와 같이 코딩을 해 주셨습니다.

音.. what the hell...
일단 삼항 연산자를 굴리는 거 같습니다. 만약 input에 input이 0보다 크다면 1, 아니면 -1을 더 해주는 형식의 코드이지요.
학부생의 입장으로서는 생각하기가 조금 곤란했던 문제였습니다. 그리고 0이 되면 print를 해주고 while문이 0이 되버려서 종료가 되어버리네요.
그리고 이 코드를 들고 교수님에게! 물어봤습니다.
교수님 코드를 보시더니 5분 동안 말씀이 없으셨습니다.
갤러리의 사진을 넘겨보셨지만 사진은 몇일 전에 꾀슈하고 먹은 버거킹 햄버거 사진 뿐이었습니다.
me : "교수님, 이게 코드 끝인데요."
교수님 : 音.... 삼항 연산자 문제네... 그냥 간단히 네 코드를 정리해보면 저렇게 나올꺼야.
me : 아.. 그건 알겠는데 어떻게 input의 값이 증가하고 감소하는지에 대한 알고리즘을 잘 모르겠네요.
교수님 : 일단 메일로 보내. 내가 나중에 메일로 풀어서 보내줄게.
me : 메일은 됬고..
(중략)
교수님 : 근데 코딩한 사람한테 안물어보고 나한테 물어보니?
me : 안 가르쳐 주셔서요.
교수님 : 한국인은 이게 문제야. 결과만 주고 설명을 해 주지는 않으니..
me : 알겠습니다. 뭐 대강 안 것 같으니.. 감사합니다.
아(...) 교수님 그분은 참 좋은 교수님이셨습니다.
p.s. 이제부터 포스팅 좀 할거에요. 시간 날때마다.





덧글
에톤 2011/06/03 17:17 # 삭제 답글
?: 구문이 input 이 0보다 클경우는 input += -1 0 이하일 경우는 input += 1 로 적용되니양수이면 1씩 감소하고, 음수이면 1씩 증가하겠죠
MiLK 2011/06/03 17:23 #
네. 그렇죠. 그러니까 제가 0보다 크다면 1을 더해주고, 아니라면 -1씩 더해주는 (1씩 빼주는) 코드라고 적어놨어요..
승네군 2011/06/03 18:23 # 답글
재미로 저렇게 짜면 모르겠지만.. 일반적으로 저렇게 '까지' 짤 필요는 없어 보입니다.냠... 이렇게 말하는 저도 이해가 안되서 이따위 소리 하는거긴 하지만 냠..;;
연산자 우선순위만 잘 알면 냠냠 할수 있는 내용.
하지만 난 모르잖아. 안될꺼야 난..아마..
MiLK 2011/06/03 23:43 #
일반적으로 저렇게까지는 안짜죠. 요즘 컴퓨터 성능도 되게 좋아지고.. 했으니까요.하지만 아직도 코드 최적화를 필요로 하는 분야는 많다고 하네요.
연산자와 기본적인 알고리즘만 이해하시면 풀리실 거에요.
더욱이 무서운 건. 저 답 보다 더 꼬여있는 답들이 있다는 겁니다(...)
solleo 2011/06/03 21:48 # 답글
C 연산자는 재미있군요. 밸리에 C 연산자 정리가 되어 있는 포스팅이 같이 있어서 이해했습니다.그런데 초면에 실례지만 글 쓰신 분도 이미 이해를 다 하신 것 같은데 어떤 부분이 이해가 안되신다고 하시는지 궁금하네요.
X += a 는 X = X+a의 축약형이고,
삼항 연산자 {condition} ? {do when true} : {do when false} 는 if 문의 축약형이니,
" input += input > 0 ? -1 : 1" 를 제가 아는 언어로 풀어쓰면
if input>0, step=-1; else step=1;end
input = input + step;
이렇게 되겠네요. 이를 축약해서 쓴 것 뿐인 것 같은데, 알고리즘이 궁금하시다는 질문이 어떤 뜻인지 궁금하네요...
MiLK 2011/06/03 23:45 #
아. 교수님한테 대강 물어보고 머리속으로 정리하니 이해 되더라구요. 그래서 위부분에 코드설명을 해놨었죠.. 제가 시간순서를 애매하게 적어놨네요 ㅎㅎ.. 죄송합니다.아, 그리고 자세한 설명 감사드려요^^
키넷 2011/06/04 00:32 # 답글
... 저걸 보니까 오랜만에 dovelet이나 해야겠다는 생각이 드네요(...)
확률분포 2011/06/05 11:17 # 답글
영헌아 나야
확률분포 2011/06/24 03:15 # 답글
영헌아 글안쓰냐