
문제만 보면 불편하게 수학적 지식을 많이 요구하는 것 처럼 보일 수 있는 문제지만, 결국 x와 y값의 음양에 따른 결과 출력을 다르게 해주기만 하면 되는 문제이다.
int x = int.Parse(Console.ReadLine());
int y = int.Parse(Console.ReadLine());
if(x > 0 && y > 0) Console.WriteLine(1);
else if(x < 0 && y > 0) Console.WriteLine(2);
else if(x < 0 && y < 0) Console.WriteLine(3);
else Console.WriteLine(4);

나는 처음 생각할 때 이렇게 풀었지만, 지금 보니 코드가 굉장히 지저분하게 보였다. 차라리 각 조건에 대한 결과를 하나의 변수에 담고 마지막에 그 변수를 출력하는 방식이면 좀 더 가독성 있었지 않았을까? 라는 생각이 든다.
int x = int.Parse(Console.ReadLine());
int y = int.Parse(Console.ReadLine());
int z;
if(x > 0 && y > 0) z = 1;
else if(x < 0 && y > 0) z = 2;
else if(x < 0 && y < 0) z = 3;
else z = 4;
Console.WriteLine(z);

생각대로 작성하고 문제풀이를 돌렸을때 정상 동작했을 때 속도는 차이가 없었지만, 메모리 용량측면에서 4kb의 차이가 생겼고, 코드 길이에서 30b의 차이가 발생했다. 메모리 용량은 z를 담기위한 변수 공간이 더 늘어났기 때문이지만 이정도 차이에 가독성을 올릴 수 있다면 2번 방식이 더 나은 것 같다.
int a=Console.ReadLine()[0],b=Console.Read();Console.Write(a!=45?b!=45?1:4:b!=45?2:3);
충격적인 코드다. 그냥 보기에는 "이게 뭐야?" 뒤에 삼항의 삼항의 삼항연산자가 존재했다. 진짜 읽기 불편한 코드였으나, 그것보다 내 상식을 완전히 깨는 부분은 바로 int a=Console.ReadLine()[0],b=Console.Read();부분이었다.
나는 당연하게 각 사분면을 분리하는 x와 y의 음수, 양수 구분은 0보다 커야한다와 0보다 작아야한다 로 고정하고 있었는데, 이 코드는 달랐다.
첫번째 줄의 첫 번째 문자를 a변수에 담고, 그 다음줄의 첫번째 문자를 b변수에 담는데 이게 45(아스키 코드에서 -음의 부호)가 맞는가 아닌가로 음수와 양수를 구분지어서 풀이했다.
굳이 숫자를 0과 비교연산을 실행할 필요가 없다. -가 붙었냐 안붙었냐를 따지기만 해서 음수와 양수를 구분해 내는 방식이 내겐 너무 생소하고 독특하게 다가왔다.
물론 뒤의 삼항연산자가 3번이나 연달아 사용되는 것은 실질적은 업무에서 가독성을 해치기 때문에 사용되지 않을 수 있지만, 정말 배울게 많았던 아주 짧은 코드였다.