math 59

[ BOJ ] 12833 : XORXORXOR ( BRONZE 1 ) / C, Python

문제 세 수 A, B, C를 입력 받은 다음, ( ( ( ( A XOR B ) XOR B ) XOR B ) … ) XOR B 형태로 연산을 C회 했을 때의 결과값을 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 A, B, C가 주어진다. (0 < A, B, C ≤ 10^9) 출력 첫째 줄에 계산된 결과를 출력한다. 풀이 과정 똑같은 수 두 개를 XOR 연산 하면 0을 얻을 수 있다는 점 아시나요? 그리고, 어떠한 수와 0을 XOR 연산 하면 수가 바뀌지 않는다는 점도 아시나요? XOR 은 비트가 다를 때 1이기 때문에, 같은 수끼리 XOR 을 하면 모두 0이 나오고, N과 전체가 0인 수와 XOR 을 하면 결국 비트 중에 1이 포함된 수는 N밖에 없기 때문에, N이 그대로 나오게 됩니다. 문제는 A에 ..

[ BOJ ] 1550 : 16진수 ( BRONZE 2 ) / C, Python

문제 16진수 수를 입력받아서 10진수로 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 16진수 수가 주어진다. 이 수의 최대 길이는 6글자이다. 16진수 수는 0~9와 A~F로 이루어져 있고, A~F는 10~15를 뜻한다. 또, 이 수는 음이 아닌 정수이다. 출력 첫째 줄에 입력으로 주어진 16진수 수를 10진수로 변환해 출력한다. 풀이 과정 16진수 수를 10진수로 변환하는 방식을 사용하여 풀이한다. 우리가 일상생활에서 사용하는 10진수는 (뒤에서 1번째 자리) x 1 + (뒤에서 2번째 자리) x 10 + (뒤에서 3번째 자리) x 100 + (뒤에서 4번째 자리) x 1000 ... 인 것처럼, 16진수는 (뒤에서 1번째 자리) x 1 + (뒤에서 2번째 자리) x 16 + (뒤에서 3번째 자리..

[ BOJ ] 2903 : 중앙 이동 알고리즘 ( BRONZE 3 ) / C, Python

문제 상근이는 친구들과 함께 SF영화를 찍으려고 한다. 이 영화는 외계 지형이 필요하다. 실제로 우주선을 타고 외계 행성에 가서 촬영을 할 수 없기 때문에, 컴퓨터 그래픽으로 CG처리를 하려고 한다. 외계 지형은 중앙 이동 알고리즘을 이용해서 만들려고 한다. 알고리즘을 시작하면서 상근이는 정사각형을 이루는 점 4개를 고른다. 그 후에는 다음과 같은 과정을 거쳐서 지형을 만든다. 정사각형의 각 변의 중앙에 점을 하나 추가한다. 정사각형의 중심에 점을 하나 추가한다. 초기 상태에서 위와 같은 과정을 한 번 거치면 총 4개의 정사각형이 새로 생긴다. 이와 같은 과정을 상근이가 만족할 때 까지 계속한다. 상근이는 어떤 점은 한 개 보다 많은 정사각형에 포함될 수 있다는 사실을 알았다. 메모리 소모량을 줄이기 위..

[ BOJ ] 10179 : 쿠폰 ( BRONZE 3 ) / C, Python

문제 당신은 어떤 물건이라도 20% 할인해주는 쿠폰을 가지고 있다. 원래 가격이 주어질 때, 쿠폰을 사용하면 얼마가 되는지 알려주는 프로그램을 작성하시오. 입력 첫 번째 줄에 테스트케이스의 수가 주어진다. 각 줄에는 물건의 원래가격이 소수점 둘째자리까지 주어진다. 출력 할인된 가격을 달러 단위로 출력한다. 나누어떨어지지 않을 때는 소수점 셋째 자리에서 반올림해서 둘째 자리까지 출력한다. 풀이 과정 원가를 입력받고 20% 할인된 가격을 구하기 위해 원가*0.8 을 한 값을 소수점 둘째 자리까지 출력한다. C #include int main(void) { int n; scanf("%d", &n); for (int i = 0; i < n; i++) { double now; scanf("%lf", &now); ..

[ BOJ ] 1110 : 더하기 사이클 ( BRONZE 1 ) / C, Python

문제 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자. 26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다. 위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다. N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오. 입력 첫째 ..

[ BOJ ] 27960 : 사격 내기 ( BRONZE 3 ) / C, Python

문제 A, B, C는 올해에도 예비군 훈련을 받으러 간다. 이번 예비군 훈련 과정 중에는 영점 사격이 있으며, 10개의 과녁 각각에 점수를 매겨 맞춘 과녁 점수의 총합을 측정한다. 과녁을 맞혔을 때, 과녁별로 각각 1점 / 2점 / 4점 / 8점 / 16점 / 32점 / 64점 / 128점 / 256점 / 512점을 얻는다. 과녁을 맞히지 않으면 해당 점수를 얻을 수 없으며, 각 과녁은 사람별로 최대 한 번만 맞힐 수 있다. A, B와 C는 영점 사격 점수를 가지고 훈련 이후에 먹을 저녁 내기를 했다. A와 B는 각자 자신들의 총합 사격 점수를 공유했지만, C는 저녁 내기의 상황을 더 쫄깃하게 하고 싶었던지 점수를 공유하지 않고 아래와 같은 말을 했다. "난 너희 둘 중 한 명만 맞힌 표적은 다 맞혔는데..

[ BOJ ] 11966 : 2의 제곱인가? ( BRONZE 3 ) / C, Python

문제 자연수 N이 주어졌을 때, 2의 제곱수면 1을 아니면 0을 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 2^30)이 주어진다. 출력 N이 2의 제곱수면 1을 아니면 0을 출력하는 프로그램을 작성하시오. 풀이 과정 1이 될 때 까지 N을 2로 나눴을 때 나머지가 0 외에 발생하지 않는다면 2의 제곱수이다. 2의 제곱수는 2가 여러 번 곱해진 꼴이기에, 2로 나눴을 때 나머지가 0 외에 발생한다면 2의 제곱수가 아니다. C #include int main(void) { int n; scanf("%d", &n); int result = 1; while (n > 1) { if (n % 2 != 0) { result = 0; break; } n /= 2; } printf("%d", re..

[ BOJ ] 23037 : 5의 수난 ( BRONZE 2 ) / C, Python

문제 키파는 문득 3과 4의 견고한 벽에 가로막혀 스포트라이트를 받지 못하는 5를 떠올렸다. '세상에 얼마나 많은 것들이 5와 관련이 있는데!' 키파는 5가 쓰이는 곳을 떠올리기 시작했다. 사람의 손가락도 5개, 정다면체의 개수도 5개, 알려진 불가촉 홀수는 5뿐이고, 별은 보통 오각별, 그리고 무엇보다 "별이 다섯 개!" 그러자 문득 키파는 자신의 마음 속에서 다섯제곱을 하고 싶은 욕망이 올라오는 것을 느꼈다. 키파를 위해, 다섯 자리 수를 입력받아, 각 자릿수의 다섯제곱의 합을 출력하는 프로그램을 작성해 주자. 입력 첫째 줄에 다섯 자리인 양의 정수 n이 주어진다. 주어지는 n은 10^4 ≤ n < 10^5을 만족한다. 출력 첫째 줄에 각 자릿수의 다섯제곱의 합을 출력하라. 풀이 과정 자릿수를 하나하..

[ BOJ ] 9655 : 돌 게임 ( SILVER 5 ) / C, Python

문제 돌 게임은 두 명이서 즐기는 재밌는 게임이다. 탁자 위에 돌 N개가 있다. 상근이와 창영이는 턴을 번갈아가면서 돌을 가져가며, 돌은 1개 또는 3개 가져갈 수 있다. 마지막 돌을 가져가는 사람이 게임을 이기게 된다. 두 사람이 완벽하게 게임을 했을 때, 이기는 사람을 구하는 프로그램을 작성하시오. 게임은 상근이가 먼저 시작한다. 입력 첫째 줄에 N이 주어진다. (1 ≤ N ≤ 1000) 출력 상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다. 풀이 과정 돌이 1개 남았을 때 : 상근이가 돌 1개 가져감 ( 상근 승리 ) 돌이 2개 남았을 때 : 상근이가 돌 1개, 창영이가 돌 1개 가져감 ( 창영 승리 ) 돌이 3개 남았을 때 : 상근이가 돌 3개 가져감 ( 상근 승리 ) 돌이..

[ BOJ ] 20053 : 최소, 최대 2 ( BRONZE 3 ) / C, Python

문제 N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 두 줄로 이루어져 있다. 각 테스트 케이스의 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다. 출력 각 테스트 케이스마다 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 한 줄에 하나씩 차례대로 출력한다. 풀이 과정 최소, 최대 문제 https://readytojoin.tistory.com/154 에서 테스트 케이스가 추가된 문제이다. 반복문을 이..