10798번: 세로읽기
적용 범위 : 문자열!
이 문제는 문자열에 대한 이해도를 높이는 데 좋은 문제 중 하나라고 생각합니다.
문제는 링크를 통해 확인하시길 바랍니다!
A A B C D D a f z z 0 9 1 2 1 a 8 E W g 6 P 5 h 3 k x
대충 이런 식으로 존재한다면 Aa0apAf985··· 이렇게 출력을 해주면 되는 굉장히~ 간단하면서도 괜찮은 문제인 것 같습니다!
물론 저는 어려웠습니다...
처음에 힌트를 뭘로 드렸죠??
맞습니다. 바로 문자열입니다.
저는 배열을 선언할 때 [5][15]의 크기를 갖고 있는 char형 배열을 선언 했습니다. 이렇게 하면 조금 문제 풀기가 쉬워지는 이유가 [5][15]에서 사실 입력되는 값은 15보다 작은 수 있는데 그것은 예외처리를 해주면 그만이기 때문입니다.
loop 범위
이중 loop를 돌면서 출력을 해주면 되는데요. 이때 주의하셔야할 점이 있다면, 저희가 출력해야하는 값들의 인덱스 번호는 몇개를 순서대로 나열해보자면 [0][0], [1][0], [2][0], [3][0], [4][0], [5][0], [0][1] ··· 이렇게 출력될 것 입니다. 그러므로 바깥쪽 for문의 범위는 0~14까지 돌려주고 안쪽은 계속 출력을 해줘야 하므로 0에서 4까지로 범위를 잡아주면 됩니다.
예외처리
문제가 뭐냐면 NULL 문자를 처리해 줘야합니다. 그렇기 때문에 위에서 설정한 범위 내에서 for문이 동작하면서 if(arr[i][j] == NULL) continue;
를 해주면 예외처리가 되게 됩니다.
여기까지 이해를 다 하셨다는 가정하에 코드를 살펴 보겠습니다.
#include <stdio.h> #define MAX_NUMBER 15 char arr[5][15]; int main(void) { for (int i = 0; i < 5; ++i) scanf("%s", arr[i]); // 중요 for (int j = 0; j < MAX_NUMBER; ++j) { for (int i = 0; i < 5; ++i) { if (arr[i][j] == NULL) continue; else printf("%c", arr[i][j]); } } printf("\n"); return 0; }
매크로 함수를 통해 그냥 정의를 해줬고요.
위의 설명에서 동일하게 코드로 옮기는 작업만 했습니다.
후기…
제가 이 문제를 학교 정보올림피아드 반에서 했지만 저는 그 시간에 못 풀었기 때문에 지금 집에 와서 풀어봤는데요.
요즘 느끼는 거지만 너무 안했다라는 많이 듭니다… 왠지 모를 짜증도 들고요. 이런 간단한 문제도 못 푸는 저의 실력을 보면서 참 안쓰럽습니다. ㅋㅋ 그렇지만 저는 포기하지는 않을 겁니다. 제가 좋다고 해서 시작한 일이고, 떨어지더라도 끝까지 최선을 다하는 모습을 보여드리겠습니다.
'온라인저지' 카테고리의 다른 글
[BOJ]2783번: 삼각 김밥 (0) | 2017.09.03 |
---|---|
[BOJ] 2477번: 참외밭 (2) | 2017.08.26 |
[BOJ]2476번: 주사위 게임 (0) | 2017.08.26 |
[BOJ]2475번: 검증수 (0) | 2017.08.26 |
[BOJ]1735번: 분수 합 (0) | 2017.08.13 |
[BOJ]11507번: 카드셋트 (0) | 2017.08.13 |
댓글