c++문제풀이

문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

출력

첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.

V = An - Bn n은 하루를 의미한다.
V = An - Bn + B A올라가고 B미끄러진 일정이 계속되다가 A 올라가서 V미터에 도달하는 경우
:정상에 올라간 후에는 미끄러지지않는다는 규칙에 의해 B만큼 마이너스된부분을 더해줌
(V-B)/(A-B) 정수나누기에 의하여 소수점 아래자리가 버려지는 경우에 대해서 +1일
:ex) 3.xxxx –> 4일

  • 제출 코드
#include <iostream>
using namespace std; 
int main()
{
	long long a, b, v;
	cin >> a >> b >> v;
	
	long long diff = a - b;
	if ((v-b) % diff == 0)
		cout << (v-b) / diff <<endl;
	else
	    cout << ((v-b) / diff) + 1 <<endl;
    
	return 0;
}

c++문제풀이

문제

육각형으로 이루어진 벌집이 있다. 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.

입력

첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.

출력

입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.

{1} / {2…7} / {8 … 19} / {20 … 37} / {38 … 61}
1 7 19 37 61 …
공차가 6n

  • 공차가 공비수열을 이루는 경우
#include <cstdio>
int main()
{
	int n;
	scanf("%d", &n);
	
	int i = 1;
	int step = 1;
	for(; i < n ;++step)
	    i += step*6;

	printf("%d", step);
	return 0;
}

c++문제풀이

문제

상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다. 숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.

상근이의 할머니는 전화 번호를 각 숫자에 해당하는 문자로 외운다.
ABC (2), DEF(3), GHI(4), JKL(5), MNO(6), PQRS(7), TUV(8), WXYZ(9)

즉, 어떤 단어를 걸 때, 각 알파벳에 해당하는 숫자를 걸면 된다. 예를 들어, UNUCIC는 868242와 같다.

할머니가 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 시간을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어는 2글자~15글자로 이루어져 있다.

출력

첫째 줄에 다이얼을 걸기 위해서 필요한 시간을 출력한다.

char type으로 선언된 문자열 - for 루프내에서 문자열을 반복하는 경우 가운데 조건문에 문자열 배열을 넣자
가운데 조건문에 문자열 배열을 넣으면 문자열의 길이만큼만 for 루프를 반복 혹은 strlen 활용하여 for 루프를 반복

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int main()
{
	char word[16];
	scanf("%s", word);
	
	int dial[26] = {3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,8,9,9,9,10,10,10,10};
	int time = 0;
	
	//for(int i; i<strlen(word); ++i) 
	//strlen is defined in header <cstring>
	
	for(int i=0; i < word[i] ; ++i)
	{
		time += dial[word[i] - 'A'];
	}
	printf("%d", time);

}