
이전 문제와 비슷한 문제이다. 다만 출력이 카운트해서 개수를 출력하는게 아니라, 조건에 해당하는 값들을 모두 한줄에 출력해 주는 점이 차이가 난다.
처음 문제를 읽었을 때 들었던 생각은 Console.Write를 를 이용해 콘솔출력값을 하나한 붙여주는 방식이었다.
int[] a = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
string[] b = Console.ReadLine().Split();
for(int i = 0; i < a[0]; i++){
if(int.Parse(b[i]) < a[1]) Console.Write($"{b[i]} ");
}

맞긴 맞았는데 왜 맞았는지 난 이해할 수 없었다.

다른 웹 코드구동 사이트에서 동작시켰을 때 위 사진과 같이 정상적인 출력이 나온 것 같아 보일테지만, 실질적으로 마지막 3뒤에 " " 공백이 포함되었기 때문에 완벽히 일치하지 않는다. 따라서 가장 끝 공백을 어떻게 삭제할 것이냐를 선택할 필요성이 있었다.
공백의 작성을 따로 빼서 for문의 if문 안에 또 if문을 넣어서 마지막 글자가 아니면 " "을 붙여주는 방식
결과를 뽑아서 마지막 공백을 제거하고 나서 출력하는 방식.
나는 2번방식을 채택하게 되었다. 아무래도 for블럭에 if블럭이 있는데 여기서 뎁스를 추가해서 적는건 가독성을 많이 해칠것 같았기 때문이다.
int[] a = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
string[] b = Console.ReadLine().Split();
string c = "";
for(int i = 0; i < a[0]; i++){
if(int.Parse(b[i]) < a[1]) c += $"{b[i]} ";
}
Console.WriteLine(c.Trim());

바로 Console.Write()를 사용하지 않고 새로운 문자열 변수를 만들어서 거기에 만든 문자열을 담고 마지막에 Trim()메소드를 이용해서 가장 앞,뒤의 공백을 제거해 주었더니 바로 해결하게 되었고, 이 방법으로 바꿨을때 속도가 2.2배나 빨라졌다.
Trim의 경우 javascript에서 내장함수로 똑같이 자주쓰던 함수이기 때문에 바로 생각낼 수 있어서 다행이었다.
int X=int.Parse(Console.ReadLine().Split()[1]);
foreach(string s in Console.ReadLine().Split())
{if(X>int.Parse(s))Console.Write(s+" ");}
다른사람의 풀이를 보면서 느낀점은 foreach문을 사용해서 따로 배열을 순회하는 횟수인 a[0]가 필요 없어져서 처음 변수선언에서 콘솔 입력의 두번째 값만을 사용할 수 있게 작성하였고,
나의 첫번째 풀이와 같이 " "공백을 추가하는 방식으로 풀이하였다. 이해가 되지 않지만, " "이 마지막에 추가된 결과 값이 같다고 여기고 왜 통과되는 걸까?