10799번 - 쇠막대기
한 줄을 입력 받아 line에 저장합니다.
그리고 ()를 발견하면 *으로 바꾸어, nline에 저장합니다.
예제 입력1의 경우
line = ()(((()())(())()))(())
nline = *(((**)(*)*))(*)
으로 저장합니다.
그러면 괄호 한 쌍 () 사이에 있는 *의 개수가 레이저로 자른 횟수가 됩니다.
예컨대, (**)이라면 하나의 쇠막대가 2번 잘린 것이므로,
잘린 쇠막대의 개수는 2+1개가 됩니다.
그리고 계산이 끝난 쇠막대는 string에서 삭제합니다.
다시 예를 들면,
((***)*) 라는 입력이 주어졌습니다.
(***)에서 안쪽 작은 쇠막대가 3번 잘리므로 3+1=4조각으로 나뉩니다.
그리고 안쪽 작은 쇠막대는 계산이 끝났으므로
(****)이 남습니다.
그럼 이 큰 쇠막대는 4번 잘리므로 4+1=5조각으로 나뉩니다.
따라서 총 잘린 쇠막대의 갯수는 4+5로 9개 입니다.
예제 입력으로 표현하면 다음과 같습니다.
*(((**)(*)*))(*) 왼쪽 기준으로 가장 안쪽 쇠막대는 (**)입니다. 따라서 2+1 조각으로 나눠졌습니다. total = 3 계산이 끝난 쇠막대는 삭제합니다.
*((**(*)*))(*) 왼쪽 기준으로 가장 안쪽 쇠막대는 (*)입니다. 따라서 1+1 조각으로 나눠졌습니다. total = 3 + 2 계산이 끝난 쇠막대는 삭제합니다
*((****))(*) 왼쪽 기준으로 가장 안쪽 쇠막대는 (****)입니다. 따라서 4+1 조각으로 나눠졌습니다. total = 3 + 2 + 5 계산이 끝난 쇠막대는 삭제합니다.
*(****)(*) 왼쪽 기준으로 가장 안쪽 쇠막대는 (****)입니다. 따라서 4+1조각으로 나눠졌습니다. total = 3 + 2 + 5 + 5 계산이 끝난 쇠막대는 삭제합니다.
*****(*) 왼쪽 기준으로 가장 안쪽 쇠막대는 (*)입니다. 따라서 1+1조각으로 나눠졌습니다. total = 3 + 2 + 5 + 5 + 2 계산이 끝난 쇠막대는 삭제합니다.
****** 더 이상 쇠막대는 없으므로 for문이 종료됩니다. 최종적으로 total = 3 + 2 + 5 + 5 + 2 = 17입니다. 예제 출력과 동일합니다.
예제 입력 2의 경우에도 동일하게 계산하여 예제 출력 24와 같은 결과가 나옵니다.
어디서 잘못되어 틀렸다고 나오는 걸까요?
((())) 로 테스트해보세요.
((())) 로 테스트하면 4가 나옵니다.
4가 맞지 않나요??
제 컴퓨터에서는 2가 나옵니다.
for문 돌면서 ++i 수행하는 게 환경마다 다르게 나오는 것 같네요. 감사합니다..
다른 컴파일러로 확인해 볼게요.
제가 컴퓨터에서 쓴 코드랑 여기 제출한 코드랑 미묘하게 달랐네요!
컴파일러 환경이 달라서 다르게 나온게 아니에요~
제가 그냥 잘못된 코드를 여기다 올린거에요~
감사합니다.
https://medium.com/@peteryun19...
koosaga님, ((())) 이 테스트케이스 답이 4가 맞지 않나요?
2가 아닌 것 같은데..
저는 답이 2라고 한 적이 없습니다.
댓글을 작성하려면 로그인해야 합니다.
gkdlmc77 7년 전
한 줄을 입력 받아 line에 저장합니다.
그리고 ()를 발견하면 *으로 바꾸어, nline에 저장합니다.
예제 입력1의 경우
으로 저장합니다.
그러면 괄호 한 쌍 () 사이에 있는 *의 개수가 레이저로 자른 횟수가 됩니다.
예컨대, (**)이라면 하나의 쇠막대가 2번 잘린 것이므로,
잘린 쇠막대의 개수는 2+1개가 됩니다.
그리고 계산이 끝난 쇠막대는 string에서 삭제합니다.
다시 예를 들면,
((***)*) 라는 입력이 주어졌습니다.
(***)에서 안쪽 작은 쇠막대가 3번 잘리므로 3+1=4조각으로 나뉩니다.
그리고 안쪽 작은 쇠막대는 계산이 끝났으므로
(****)이 남습니다.
그럼 이 큰 쇠막대는 4번 잘리므로 4+1=5조각으로 나뉩니다.
따라서 총 잘린 쇠막대의 갯수는 4+5로 9개 입니다.
예제 입력으로 표현하면 다음과 같습니다.
예제 입력 2의 경우에도 동일하게 계산하여 예제 출력 24와 같은 결과가 나옵니다.
어디서 잘못되어 틀렸다고 나오는 걸까요?