1094번: 막대기
길이가 64인 막대를 반씩 계속 나누어 Xcm인 막대로 붙이는 문제이다. 예를들어 X가 23이라면 16 + 4 + 2 + 1 인 4개의 막대를 이어붙여서 만들 수 있다. 막대를 계속해서 반씩 나눈다면 64, 32, 16, 8, 4, 2, 1의 길이가 나오게 된다. 나는 살짝 편법을 써서 나올 수 있는 길이들을 모두 배열에 미리 저장해두었다. 만약 반으로 나눈 길이가 X보다 작다면 X에서 나눈 길이를 빼고, 막대의 개수를 하나 늘린다. 만약 반으로 나눈 길이와 X가 일치한다면 나머지 계산을 하지 않는다. 이에 따라서 코드를 작성해보았다. #include using namespace std; int main() { int a[] = { 64, 32, 16, 8, 4, 2, 1 }; int n = 64; in..
더보기