목록프로그래밍/C프로그래밍 문제 (7)
이쁜왕자 만쉐~~
* * * * * * * * * * * * * * * 위와 같은 출력 결과를 내는 프로그램을 작성하시오 라는 문제가 있다. 아래 예시는 C 언어로 작성했지만, 프로그래밍 언어와는 딱히 상관이 없다. 프로그래머 A - 초보(?) 프로그래머 B - 고수(?) 인터넷에 코딩 초보와 고수라는 짤이 돌아 다닌다. 해당 게시물에서는 왼쪽이 초보, 오른쪽이 고수 라고 나온다. 정말 그러할까? 만약 정말 요구사항이 처음 나온 그대로에서 바뀌지 않는다는 100% 확신이 있다면 오른쪽 형태로 코딩해도 상관 없고, 그것이 고수 맞다. 하지만, 현실을 그렇지 않다. 현실에서 코딩은 요구사항이 계속 바뀐다. 몇가지 간단한 예제를 들어 보자. 1. 문제를 5줄이 아니라 10줄로 출력해 보자. 왼쪽은 루프 안에 5 를 10으로 바..
C 언어를 비롯하여 각종 C-like 언어들은 대부분 배열 인덱스로 i 를 씁니다. int i; int a[10]; for (i=0;i
"Hello World without Semicolon" 이라고, hello world 를 출력하는 C 프로그램을 작성하는데, 세미콜론(;) 을 사용하지 말고 작성하라는 문제가 있습니다. 일단 C 표준을 완전히 따르면서, 컴파일 워닝조차 없는 답은 아직 없는 것 같습니다. 일단 C 표준에서는 int main() 을 사용하도록 되어 있기 때문에, 반드시 return 0; 가 필요하고, 여기에서 세미콜론이 사용됩니다. 다만, return 을 생략하더라도 컴파일러가 이정도는 워닝만 출력하고 알아서 처리해주기 떄문에, 약간의 융통성을 발휘할 수 있습니다. 아니면 표준을 어기고 void main() 을 쓰는 방법도 있습니다. 어느 것을 선택하든 워닝은 발생합니다. 문제의 핵심은 printf("hello world..
문제1) 아라비아 숫자로 입력을 주면 로마 숫자로 출력하기 input : 2021 output : MMXXI 문제2) 로마 숫자로 입력을 주면 아라비아 숫자로 출력하기 input : MMXXI output : 2021 --------- 표에는 없지만 500 = D
C 언어에서는 변수의 타입이 아주 요상하게 정의되어 있다. Each compiler is free to choose appropriate sizes for its own hardware, subject only to the restriction that shorts and ints are at least 16 bits, longs are at least 32 bits, and short is no longer than int, which is no longer than long. 이게 TCPL 에 써있는 그대로 긁어 온 것이다. short : 16비트 이거나 이보다 크다. int : 16비트 이거나 이보다 크다. 또한 short 보다 크거나 같다. long : 32비트 이거나 이보다 크다. 또한 int ..
C언어에서 콜론(colon, : ) 이 사용 되는 곳을 모두 나열하라. 라는 문제가 있다. 정확히 3가지 용법으로 사용된다. 1. 삼항 연산자 (ternary operator) (a>b) ? a : b 2. 비트 필드 (bit field) struct { unsigned int one_bit : 1; unsigned int two_bits : 2; } s; 3. 레이블 (label) - switch 또는 goto 용으로 사용된다. switch (a) { case 1 : // do something; break; default : // do something; break; }
여기서 파티션(partition)은 하드디스크 파티션이 아니라 수학의 정수론에 나오는 파티션이다. http://en.wikipedia.org/wiki/Partition_(number_theory) 파티션이란 어떤 수를 여러개의 0보다 큰 정수로 자르는 방법에 대한 내용이다. 예를 들어 4 라는 수는 4, 3+1, 2+2, 2+1+1, 1+1+1+1 이라는 5가지 방법으로 표현할 수 있다. 작은 수는 손으로 해도 되지만, 수가 커질수록 손으로 할만한 수준이 아니게 된다. 예를 들어 n = 10 일때는 겨우 42 가지밖에 안되지만, n = 100 인 경우는 1억 9천만 가지의 분할 방법(정확히는 190569292)이 존재한다. 이쯤 되면 컴퓨터의 도움 없이 뭔가를 한다는 건 불가능하다. 여하튼, 10개의 동..