inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

5-H (13144) 질문

411

카가미네렌

작성한 질문수 6

0

선생님 안녕하세요 ~ 문제를 풀다 질문이 생겨 글을 남깁니다 !

https://www.acmicpc.net/problem/13144 문제 링크

http://boj.kr/37f120d6ba16481cb0425be0b64fc8c6 코드 링크

 

해당 문제에서, 저도 기존에 없던 수가 들어오면 배열 cnt에 인덱스를 저장하고,

기존에 있던 수가 들어오면 답 += (현재 인덱스 - 이전 인덱스) 를 하고 인덱스를 갱신했습니다.

 

그리고 마지막에 아직 계산되지 않은 수들을 위해서, (갱신되지 않아 답 처리가 안된 수들)

for(int i=1; i<=100000; i++) if(cnt[i]!=0) ans += (n+1-cnt[i]);

한번 이상 카운트 된 수들에 대해서 n+1 - 인덱스 를 답으로 처리해주는 부분을 추가했는데요

제출시 오답으로 나오는 이유를 모르겠습니다. ! 어느 부분의 논리가 틀린걸까요 ...?!

 

코테 준비 같이 해요! C++

답변 2

0

큰돌

굉장히. 아이디어가 좋은 코드입니다.

일단 피벗을 걸어넣고 그 부분을 포함하는 "중복되지 않은 수열"을 더해서 답을 만들어가는 것. 좋습니다.

but, 반례입니다.

8

1 1 1 1 1 2 2 2

 

답은 9가 나와야 하는데 모모님의 코드는 11을 반환합니다.

0

카가미네렌

선생님, 어느부분이 이상한지 이해했습니다 ~!!! 감사합니다 !!!!!!

0

큰돌

안녕하세요. ㅎㅎ 코드 다 봤는데요.

나머지 부분은 다 이해가 가는데 다음 코드 조금만 더 설명 가능할까요?

제 생각에는 이 코드는 마지막 부분을 처리하는 것 같은데요. 예를 들어 갱신되는 구간을 다 처리한 후 1 2 3 4 5 처럼 마지막의 경우 등차수열의 합으로 처리하는 부분인 것 같은데 맞나요?

for(int i=1; i<=100000; i++) if(cnt[i]!=0) ans += (n+1-cnt[i]);

0

카가미네렌

넵 맞습니다 ! 의도는 그렇게 해서 짰는데, 오답으로 나오는 이유를 모르겠습니다 !!

1-E질문입니다!

0

515

2

3-L 틀린 부분 피드백 부탁드립니다.

0

815

2

1-A문제 순열재귀함수 질문입니다.

0

380

1

1-A 일곱난쟁이문제입니다

0

454

1

문제 풀 때 방향성에 대해

0

797

1

맥에서 vs code로 실행 관련 질문입니다

0

520

1

17071번 메모리 초과

0

384

1

1-C질문입니다!

0

417

2

2-B BFS 시간초과질문

0

628

2

1-O 13번 라인

0

438

1

6-J 놀이공원 문제 질문

0

379

1

구현관련 질문

0

481

1

강의 교안

0

316

1

실력을 더 올리고나서 강의를 보는 것이 맞을까요?

0

544

1

안녕하세요! 재귀함수에 관해서 질문드립니다

0

534

1

1-K

0

471

2

3-G번 질문있습니다.

1

470

3

3-C 실행 시간 질문드립니다.

0

491

1

4-A 문제 풀이 질문있습니다.

0

590

2

비트마스킹 연산자 "1의 보수" 영문 표기법

0

433

1

격자탐색 문제에서 BFS 시간복잡도 질문드립니다.

0

332

1

3-O go 함수 질문 드립니다.

1

443

2

4-A 출력 질문

0

301

1

1주차 1-O 질문드립니다

0

253

1