Basic C Programming 無念無想

C 프로그래밍 과제가 있었습니다.

그저 for, while문과 같은 기본적인 제어문을 학습하는 정도의 과제였는데요.

문제의 근원은 아래의 문제였습니다.

사용자로부터 하나의 정수값을 입력받아서 그 수가 음수면 0이 될 때까지 1씩 증가시키면서 값을 한 줄에 하나씩 출력하고, 입력받은 수가 양수면 0이 될 때까지 1씩 감소시키면서 값을 한 줄에 하나씩 출력시키는 프로그램을 작성하시오.


그냥 저는 기본적인 제어문(if, while combine)을 이용하여 작성하였습니다.

...음....

제가 코딩하는걸 보고 심심해 하시던 분이!
아래와 같이 코딩을 해 주셨습니다.


音.. what the hell...

일단 삼항 연산자를 굴리는 거 같습니다. 만약 input에 input이 0보다 크다면 1, 아니면 -1을 더 해주는 형식의 코드이지요.
학부생의 입장으로서는 생각하기가 조금 곤란했던 문제였습니다. 그리고 0이 되면 print를 해주고 while문이 0이 되버려서 종료가 되어버리네요.

그리고 이 코드를 들고 교수님에게! 물어봤습니다.

교수님 코드를 보시더니 5분 동안 말씀이 없으셨습니다.
갤러리의 사진을 넘겨보셨지만 사진은 몇일 전에 꾀슈하고 먹은 버거킹 햄버거 사진 뿐이었습니다.

me : "교수님, 이게 코드 끝인데요."
교수님 : 音.... 삼항 연산자 문제네... 그냥 간단히 네 코드를 정리해보면 저렇게 나올꺼야.
me : 아.. 그건 알겠는데 어떻게 input의 값이 증가하고 감소하는지에 대한 알고리즘을 잘 모르겠네요.
교수님 : 일단 메일로 보내. 내가 나중에 메일로 풀어서 보내줄게.
me : 메일은 됬고..

(중략)

교수님 : 근데 코딩한 사람한테 안물어보고 나한테 물어보니?
me : 안 가르쳐 주셔서요.
교수님 : 한국인은 이게 문제야. 결과만 주고 설명을 해 주지는 않으니..
me : 알겠습니다. 뭐 대강 안 것 같으니.. 감사합니다.

아(...) 교수님 그분은 참 좋은 교수님이셨습니다.

p.s. 이제부터 포스팅 좀 할거에요. 시간 날때마다.

공유하기 버튼

 
싸이월드 공감트위터페이스북

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://www.milk92.net/tb/621411 [도움말]

덧글

  • 에톤 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 # 답글

    영헌아 글안쓰냐
댓글 입력 영역