문제

최근에 아주 비싼 키보드를 구입한 성주는 키보드의 진정한 가치를 느끼기 위해 여러가지 기능을 알아보기로 했다. 이것 저것 눌러보던중 "레알힘"을 느낄수 있는 아주 강력한 기능을 발견했다. 복사, 붙여넣기. 이름하여 복붙기능이 탑재되어 있었다. 복사 또는 붙여넣기를 하는데 각각 1초의 시간이 소요된다. 복붙놀이에 심취하던 중 하나뿐인 여동기 민지에게 하트를 복사, 붙여넣기해서 보여주기로 했다. 입력된 개수의 하트를 복붙놀이로 만드는데 걸리는 시간을 구하라. 

  • 첫 화면에는 하트 한 개가 있다.
  • 복사를 하면 화면에 보이는 모든 하트가 클립보드에 저장된다.
  • 붙여넣기를 하면 클립보드에 있는 모든 하트가 붙여넣기가 된다.

 

입력

하트의 개수 (2 <= N <= 2000) 

출력

하트를 복붙놀이를 해서 만드는데 걸리는 시간 

예제 입력1

2

예제 출력1

2


1. ♥ (복사, 클립보드에 1개가 들어간다)
2. ♥♥ (붙여넣기, 화면에 하트가 2개가 된다)

예제 입력2

6

예제 출력2

5


1. ♥ (복사, 클립보드에 1개가 들어간다)
2. ♥♥ (붙여넣기, 화면에 하트가 2개가 된다)
3. ♥♥ (복사, 클립보드에 2개가 들어간다)
4. ♥♥♥♥ (붙여넣기, 화면에 하트가 4개가 된다)
5. ♥♥♥♥♥♥ (붙여넣기, 화면에 하트가 6개가 된다) 

예제 입력3

11

예제 출력3

11


예제 입력4

16

예제 출력4

8

 

예제 입력5

1000

예제 출력5

21




[소스코드 설명]



Posted by 밍쫑
,

문제

신입 단기과제 연계 끝에 대전멤버십에서 새로운 숫자 체계 "MemNumber"를 완성시켰다. 이것은 4개의 소문자 m, c, x, i와 8개의 숫자 2, 3, 4, 5, 6, 7, 8, 9로 수를 표현한다. 즉, 0과 1은 사용하지 않는다.

 

몇가지 예를 들면

  • "5m2c3x4i" 는 5234 (= 5*1000 + 2*100 + 3*10 + 4*1)
  • "m2c4i" 는 1204 (= 1000 + 2*100 + 4*1)
  • "5m2c3x" 는 5230 (= 5*1000 + 2*100 + 3*10)

위 예에서

  • "5m" 는 5000 (= 5*1000)
  • "2c" 는 200 (= 2*100)
  • "3x" 는 30 (= 3*10)
  • "4i" 는 4 (= 4*1)

즉, m, c, x, i 앞에 2부터 9까지 수가 올 수 있는데 이 수와 짝을 이루어 수의 곱을 의미한다.

m, c, x, i 는 많아야 한 번 나올수 있다. 접두 숫자와는 같이 움직인다. m , c ,x , i 는 이 순서로 나와야 한다. 

다음은 가능하지 않는 "MemNumber"이다.

  • "1m2c4i"
  • "mcc4i"
  • "m2c0x4i"
  • "2cm4i"

 

"MemNumber" 문자열 두개를 입력으로 받아 "MemNumber" 수의 합을 구한 후 대응되는 "MemNumber" 문자열을 출력한다.

 

입력

"MemNumber" 문자열 2개가 입력된다.

두 수의 합은 9999를 넘지 않는다.

 

출력

입력된 "MemNumber" 문자열의 합을 "MemNumber"수로 출력한다.

예제 입력1

xi x9i

예제 출력1

3x


예제 입력2

i 9i

예제 출력2

x


예제 입력3

m2ci 4m7c9x8i

예제 출력3

5m9c9x9i


예제 입력4

9m8c7xi c2x8i

예제 출력4

9m9c9x9i



[문제 설명]

m = 1000

c = 100

x = 10

i = 1

1. 이 4개의 문자들은 2~9까지의 8개의 숫자와 짝을 이룹니다.

따라서 4m = 4 * 1000 = 4000이라고 볼 수 있고, mc = 1000 + 100 = 1100이라고 볼 수 있습니다.

2. mcxi는 각 한 번씩만 나올 수 있습니다.

3. m - c - x - i 꼭 이 순서대로 문자가 나와야 합니다.

이 세 가지 조건을 만족하면서 두 수의 합을 계산 한 후 다시 m, c, x, i 로 표현을 하는 것이 이번 문제였습니다.


[소스 코드 설명]

입력받은 문자의 길이를 구한 후, 그 길이 만큼 for문을 돌면서 각 문자별로 앞에 붙은 숫자와 짝을 이루어 입력받은 문자가 숫자로 환산하면 몇 인지를 파악합니다.

그리고 환산한 두 숫자를 더한 후에 다시 mcxi 문자로 바꿔주는 소스 코드 입니다.



Posted by 밍쫑
,

문제

멤버마을 멤버집에 살고 있는 우리 친구 현수는 축구를 너~~무 좋아해요♥

멤버학교에 새로 입학한 신입들을 데리고 축구를 하러 나가려는 찰나!! 멤버마을의 촌장인 미스타 "손"은 피곤한 신입들을 보호하고자 현수를 가로막습니다. 옆에서 지켜보고 있던 멤버마을의 부촌장인 새로운 "손"은 한가지 제안을 합니다. 

 

"마을에 쯔쯔가무시가 돌고 있다. 쥐를 잡아와라. 그렇다면 축구를 허락하겠다!"

축구를 너무 사랑하는 우리 친구 현수를 돕기 위해서 다함께 고양이(CAT)를 한마리 찾아볼까요?

 

입력된 문자열에 C, A, T가 순서대로 들어있다면 "YES"를 출력하고,

순서가 섞여 있거나 혹은 없다면 "NO"를 출력하세요.

 

입력

문자열의 길이는 1~50개이며, 'A' 부터 'Z' 이 이외의 문자는 없다.

 

출력

고양이를 찾으면 "YES"

못찾으면 "NO" 

예제 입력1

XCYAZTX

예제 출력1

YES


예제 입력2

CTA

예제 출력2

NO


예제 입력3

SGHDJHFIOPUFUHCHIOJBHAUINUIT

예제 출력3

YES


예제 입력4

CCCATT

예제 출력4

NO

 

HINT

고양이는 한 마리만 잡읍시다! 사료값 아끼자구요!



[문제 풀이]

순서대로 "CAT"이라는 단어가 순서대로 한 번만 존재해야하지만  "YES"가 출력되는 문제이다.

꼭 붙어있을 필요는 없고, 예제 이력 4를 보면 CAT가 하나 있는 것처럼 볼 수도 있겠지만!

CCCATT, CCCATT, CCCATT, CCCATT, CCCATT, CCCAT로 여러가지의 CAT이 나오므로 출력은 NO라고 볼 수 있다.



[소스코드 설명]

변수 cat은 사용자의 입력이 들어가게 되고, cat2에는 C, A, T일 경우, 그 단어를 받아들이는 임시 변수라고 보면 된다.

그리고 여기서 cat2.find("CAT"); 라는 것을 썼는데, 그것은 C++에서 제공하는 find()함수를 이용하여 cat2에 CAT이 존재하는지를 찾아주는 함수이다.

string::find

CString 개체의 문자열 기준, 좌측에서부터 문자 혹은 문자열을 검색한다.


string::find()를 통하여 원하는 단어나 문장을 검색 후 

그것이 문자열에 있는지 없는지string::npos를 통하여 알 수가 있다.

(string::find()는 찾고자 하는 단어나 문자열이 없으면 string::npos를 리턴한다.)



Posted by 밍쫑
,