λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μ•Œκ³ λ¦¬μ¦˜ πŸ‘©πŸ»‍πŸ’»/λ°±μ€€

#1436

by flowing1ife 2023. 3. 21.
  • 문제

666은 쒅말을 λ‚˜νƒ€λ‚΄λŠ” 수라고 ν•œλ‹€. λ”°λΌμ„œ, λ§Žμ€ λΈ”λ‘λ²„μŠ€ν„° μ˜ν™”μ—μ„œλŠ” 666이 λ“€μ–΄κ°„ 제λͺ©μ„ 많이 μ‚¬μš©ν•œλ‹€. μ˜ν™”κ°λ… μˆŒμ€ μ„Έμƒμ˜ 쒅말 μ΄λΌλŠ” μ‹œλ¦¬μ¦ˆ μ˜ν™”μ˜ 감독이닀. μ‘°μ§€ λ£¨μΉ΄μŠ€λŠ” μŠ€νƒ€μ›Œμ¦ˆλ₯Ό λ§Œλ“€ λ•Œ, μŠ€νƒ€μ›Œμ¦ˆ 1, μŠ€νƒ€μ›Œμ¦ˆ 2, μŠ€νƒ€μ›Œμ¦ˆ 3, μŠ€νƒ€μ›Œμ¦ˆ 4, μŠ€νƒ€μ›Œμ¦ˆ 5, μŠ€νƒ€μ›Œμ¦ˆ 6κ³Ό 같이 이름을 μ§€μ—ˆκ³ , ν”Όν„° μž­μŠ¨μ€ λ°˜μ§€μ˜ μ œμ™•μ„ λ§Œλ“€ λ•Œ, λ°˜μ§€μ˜ μ œμ™• 1, λ°˜μ§€μ˜ μ œμ™• 2, λ°˜μ§€μ˜ μ œμ™• 3κ³Ό 같이 μ˜ν™” 제λͺ©μ„ μ§€μ—ˆλ‹€. ν•˜μ§€λ§Œ μˆŒμ€ μžμ‹ μ΄ μ‘°μ§€ λ£¨μΉ΄μŠ€μ™€ ν”Όν„° μž­μŠ¨μ„ λ›°μ–΄λ„˜λŠ”λ‹€λŠ” 것을 보여주기 μœ„ν•΄μ„œ μ˜ν™” 제λͺ©μ„ μ’€ λ‹€λ₯΄κ²Œ λ§Œλ“€κΈ°λ‘œ ν–ˆλ‹€.

μ’…λ§μ˜ μˆ˜λž€ μ–΄λ–€ μˆ˜μ— 6이 적어도 3개 이상 μ—°μ†μœΌλ‘œ λ“€μ–΄κ°€λŠ” 수λ₯Ό λ§ν•œλ‹€. 제일 μž‘μ€ μ’…λ§μ˜ μˆ˜λŠ” 666이고, κ·Έ λ‹€μŒμœΌλ‘œ 큰 μˆ˜λŠ” 1666, 2666, 3666, .... 이닀. λ”°λΌμ„œ, μˆŒμ€ 첫 번째 μ˜ν™”μ˜ 제λͺ©μ€ "μ„Έμƒμ˜ 쒅말 666", 두 번째 μ˜ν™”μ˜ 제λͺ©μ€ "μ„Έμƒμ˜ 쒅말 1666"와 같이 이름을 지을 것이닀. μΌλ°˜ν™”ν•΄μ„œ μƒκ°ν•˜λ©΄, N번째 μ˜ν™”μ˜ 제λͺ©μ€ μ„Έμƒμ˜ 쒅말 (N번째둜 μž‘μ€ μ’…λ§μ˜ 수) 와 κ°™λ‹€.

숌이 λ§Œλ“  N번째 μ˜ν™”μ˜ 제λͺ©μ— λ“€μ–΄κ°„ 수λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. μˆŒμ€ 이 μ‹œλ¦¬μ¦ˆλ₯Ό 항상 μ°¨λ‘€λŒ€λ‘œ λ§Œλ“€κ³ , λ‹€λ₯Έ μ˜ν™”λŠ” λ§Œλ“€μ§€ μ•ŠλŠ”λ‹€.

  • μ½”λ“œ
#include <iostream>
#include <vector>
#include <string>

using namespace std;

//μ—°μ‚°ν•˜λŠ” ν•¨μˆ˜
int cal(int n) {
	int cnt = 0; // 숫자 카운트
	int num = 666; // 벑터 λ°°μ—΄ 크기

	while (true) {

		string s = to_string(num); //string으둜 λ³€ν™˜
		if (s.find("666") == string::npos) { //μ—°μ†μœΌλ‘œ 이루어진 666을 μ°Ύμ§€ λͺ»ν•˜λ©΄ 
			num++; //λ‹€μŒμˆ˜λ‘œ 이동
			continue;
		}
		
		cnt++; // μ—°μ†μœΌλ‘œ 이루어진 666을 μ°Ύμ•˜λ‹€λ©΄ cnt 1 증가 

		if (cnt == n) { // cnt값이 nκ³Ό κ°™μ•„μ§€λ©΄ num을 λ°˜ν™˜
			return num;
		}

		num++; //아직 κ°™μ•„μ§€μ§€ μ•Šμ•˜λ‹€λ©΄ λ‹€μŒ 수둜 이동
		
	}
}

int main()
{
	int n, result;
	//μž…λ ₯

	cin >> n;

	result = cal(n);

	cout << result;

	return 0;
	
}
  • ν•΄μ„€

1. cal ν•¨μˆ˜

- 666이 담겨 μžˆλŠ” μ’…λ§μ˜ μˆ˜μΈμ§€ ν™•μΈν•˜λŠ” ν•¨μˆ˜

: 첫번째 μ’…λ§μ˜ 수인 666λΆ€ν„° μ‹œμž‘

: 666을 string으둜 λ³€ν™˜

: λ§Œμ•½ μ—°μ†μœΌλ‘œ 이루어진 666을 μ°Ύμ§€ λͺ»ν–ˆλ‹€λ©΄ num을 증가해 λ‹€μŒμˆ˜λ‘œ 이동

: μ°Ύμ•˜λ‹€λ©΄ cnt 1증가

: λ§Œμ•½ cnt 값이 nκ³Ό κ°™μ•„μ‘Œλ‹€λ©΄ n번째 μ’…λ§μ˜ 수λ₯Ό 찾은 κ²ƒμ΄λ―€λ‘œ num을 return

: nκ³Ό κ°™μ•„μ§€μ§€ μ•Šμ•˜λ‹€λ©΄ λ‹€μŒ μ’…λ§μ˜ 수λ₯Ό μ°Ύμ•„μ•Ό ν•˜λ―€λ‘œ num +1

 

2. main ν•¨μˆ˜

: n을 μž…λ ₯ λ°›κ³  calν•¨μˆ˜λ₯Ό μ΄μš©ν•΄ κ³„μ‚°ν•œ μ’…λ§μ˜ 수λ₯Ό result에 μ €μž₯ν•΄ 좜λ ₯ 

'μ•Œκ³ λ¦¬μ¦˜ πŸ‘©πŸ»β€πŸ’» > λ°±μ€€' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

#1655  (0) 2023.03.30
#1063  (0) 2023.03.21
#1065  (0) 2023.03.21
#9421  (1) 2023.03.17
#2981  (0) 2023.03.17