##하나. SWEA 9480. 민정과 광직의 알파벳 공부
- 알파벳 26자를 모두 확인하려면 다음 단계를 따르세요.
int count = 1;
for (int i = 0; i < 26; i++) { // 모든 알파벳이 등록되었다면 값이 0인 원소가 없을 것
count *= alphabet(i);
}
if (count == 0) { // 반드시 하나는 0이라는 의미이므로 알파벳 배열 완성 x
return false;
}
- alphaget(i)를 곱하면 오버플로가 발생할 수 있으며 count == 0인 바람직하지 않은 상황이 발생할 수 있습니다.
- 일반적인 방법을 사용하거나 총 26개의 알파벳이 있으므로 26비트를 사용하여 비트마스크합니다.
##2. BOJ 23291 어항 구성
-
구현 문제에서 오답이 튀어나와서 디버깅하기가 매우 어려웠습니다.
(솔직히 마음이 찢어졌다) -
위의 경우처럼 혼자서는 해결할 수 없었지만 제가 작성한 모든 코드 세트에 대해 ‘이게 제대로 작동하는 걸까요?’ 이것을 확인하는 방법은 한 가지 밖에 없는 것 같습니다.
-
코드 가독성이 좋지 않으면 오류를 발견하기 어렵습니다.
90도 회전할 때 while 조건이 문제였습니다.// 가독성 떨어질때의 오답, 90도 변환 끝내는 조건이 startIndex + 돌리는 배열의 가로 길이 + 세로길이 - 1 < N이어야 하는데, // (depth / 2 + 1 ) * 2 즉, 세로 길이 * 2라고 잘못 생각하고 있었다.
// (depth / 2 + 1 ) * 2 가 아닌, turnedArrHeight * 2 라고 표현했다면 더 찾기 쉬웠을지도? static int() degree90BowlStacking() { int startIndex = 0, depth = 0; while (startIndex + (depth / 2 + 1) * 2 < N) { int turnedArrHeight = (depth + 1) / 2 + 1; int turnedArrWidth = depth / 2 + 1; int()() turnedArr = new int((depth + 1) / 2 + 1)(depth / 2 + 1); for (int y = 0; y < turnedArrHeight; y++) { for (int x = 0; x < turnedArrWidth; x++) { turnedArr(y)(x) = fishBowl(y)(startIndex + x); fishBowl(y)(startIndex + x) = 0; } } for (int y = 0; y < turnedArrHeight; y++) { for (int x = 0; x < turnedArrWidth; x++) { int X = startIndex + turnedArrWidth; int Y = turnedArrWidth; fishBowl(Y - x)(X + y) = turnedArr(y)(x); } } depth++; startIndex += turnedArrWidth; } return new int() {depth, startIndex}; }
// 정답 처리된 수정본
static int\(\) degree90BowlStacking() {
int startIndex = 0, depth = 0;
int turningArrHeight = (depth + 1) / 2 + 1;
int turningArrWidth = depth / 2 + 1;
while (startIndex + turningArrHeight + turningArrWidth - 1 < N) {
int()() turningArr = new int(turningArrHeight)(turningArrWidth);
for (int y = 0; y < turningArrHeight; y++) {
for (int x = 0; x < turningArrWidth; x++) {
turningArr(y)(x) = fishBowl(y)(startIndex + x);
fishBowl(y)(startIndex + x) = 0;
}
}
for (int y = 0; y < turningArrHeight; y++) {
for (int x = 0; x < turningArrWidth; x++) {
int X = startIndex + turningArrWidth;
int Y = turningArrWidth;
fishBowl(Y - x)(X + y) = turningArr(y)(x);
}
}
depth++;
startIndex += turningArrWidth;
turningArrHeight = (depth + 1) / 2 + 1;
turningArrWidth = depth / 2 + 1;
}
return new int() {depth, startIndex};
}
“`