#include <stdio.h>
#include <string.h>
int main() {
char x[51];
scanf("%s", x);
int len = strlen(x);
int i = 0;
char y[101] = "";
while (i < len) {
if (x[i] == 'X') {
int count = 0;
while (i + count < len && x[i + count] == 'X') {
count++;
}
if (count % 2 != 0) {
printf("-1\n");
return 0;
}
int A = count / 4;
int B= (count % 4) / 2;
for (int j = 0; j < A; j++) {
strcat(y, "AAAA");
}
for (int j = 0; j < B; j++) {
strcat(y, "BB");
}
i += count;
} else {
strncat(y, &x[i], 1);
i++;
}
}
printf("%s\n", y);
return 0;
}
1.x부분에 문자열을 입력받는다.
2.X의 개수가 몇 개 인지 while문에서 .이 나올 때 까지 센다.
2-1. .이 나올 때 까지 반복문을 센 뒤 홀수일 경우 폴리오미노가 불가능하므로 -1을 반환 뒤 프로그램을 종료한다.
3. X가 몇개가 나온지에 따라 strcat으로 y에 바뀐 문자열을 붙인다.
4.2부터 3까지의 과정을 문자열이 끝날 때 까지 반복한다.
5.출력한다.
#include <stdio.h>
int main() {
int X;
scanf("%d", &X);
int count = 0;
int first = 64;
while (X > 0) {
if (first <= X) {
X -= first;
count++;
}
first /= 2;
}
printf("%d\n", count);
return 0;
}
1.X에다가 만들고 싶은 막대기의 값을 입력받습니다.
2.가지고 싶은 막대기 값을 현재 막대기의 길이에서 빼는 방식으로 합니다.
2-1. 만약 48cm를 가지고 싶다고 가정할 경우 while문을 한 번 돕니다. 그럼 first의 값은 32가 됩니다.
2-2.X-=32는 16이 된 다음, first의 값 또한 16이 됩니다. 현재까지의 count(막대기가 부러진 횟수)는 1 입니다.
2-3. X-16이 되면서 막대기가 만들어집니다. 이 때 count값은 2이며 막대기가 만들어졌기에 반복문이 끝납니다.
3.위와 같이 실행한 횟수를 출력합니다.