본문 바로가기

분류 전체보기337

백준 1940/c++ )) 주몽 - 투포인터 사용 처음엔 총 합을 구해서 특정 수로 나눈 답을 카운트 하는 너무너무 간단한 문제인줄 알았는데 그럼 그렇지 너무 쉽다 했다 투 포인트를 써서( 두개의 포인터 알고리즘) 풀면 답이 쉽고 빠르게 나온다 투포인터는 사용한 값은 제외하고, 순서 상관없이 두개의 합이나 중복되는 구간합을 구할때 사용하는것 같다 처음 마주한 개념이라 이해와 에러 잡기가 상당히 시간이 걸렸다 아래에 투포인트를 써서 푼것과 이중 for문을 쓴 것 모두 올려보겠다 투 포인터 사용해본 코드 #include using namespace std; int n, m; int main(){ int cnt=0; int sum=0; int a[15004]; cin >> n; cin >> m; // 시작 요소 인덱스 int ptS=0; // 마지막 요소 인.. 2022. 6. 16.
변수 사용전 반드시 초기화 할 것, 선언만 하면 안된다 예를 들어 int k; int n = k-1; k=3; 일때, n의 값은 2가 아니라 에러가 나온다 k가 초기화 되기 전에는 쓰레기 값을 가지고 있기 때문이다. 물론 전역변수로 k가 선언되면 0으로 자동 초기화가 되긴한다 변수 사용 전에 꼭 초기화를 해주자 선언만 하고 사용하면 이런 문제가 생길 수 있다 간단한 실수지만 생각보다 자주 하니 조심하자 2022. 6. 16.
백준 3986/c++ )) 좋은 단어 - 스택 사용 개선답 이전 풀이는 수열의 규칙을 찾아서 풀려고 하다가 반례가 나와서 실패했다 스택을 통해서 테트리스처럼 새 단어와 stack 맨 위의 단어가 같으면 top을 pop 해서 없애주고 top과 새 단어가 다르면 stack 에 push 하여 쌓는 과정을 통해서 쉽게 코드를 짤 수 있었다 느낀점 : 문제에 맞는 최적의 자료구조를 이용하여 로직을 짜야 시간낭비도 적고, 정확도도 높은 코드를 작성가능하다 #include using namespace std; int n; string s; int main(){ int cnt=0; // 여기에 스택 선언 시, 아래 for문에서 돌때마다 스택안 값들이 남아있어서 에러가 난다 cin >> n; for(int i=0; i> s; // 한번 돌때마다 새로 stk 를 선언, 새 스택을.. 2022. 6. 16.
백준 3986/c++ )) 좋은 단어 - 오답 나열한 문자간의 규칙을 찾아서 수열을 이용해서 풀어보았다. s의 길이가 짝수개일때 B의 개수는 중요하지 않고 A의 개수만 파악하여 A의 인덱스를 벡터d에 저장, A가 없을시에는 s는 모두 B만 있고 짝수이므로 a를 세는 acnt 가 0일때 결과개수 cnt 를 하나 올려준다 벡터 d의 요소들의 총 합이 홀수일 경우 s는 결과에 부합 cnt 를 올려주는 로직이다. 테스트 케이스는 모두 맞으나 계속 실패한 원인 분석 결과, 로직이 잘못되었다. 반례로 ABAAAABABBAA 의 경우는 결과에 부합하지만 d의 총합이 짝수이므로 에러가 난다 d 의 인덱스 사이의 차이를 새 벡터 de로 만들어서 de 총합이 홀수인 경우로 수정하여도 에러가 났다 즉 이 로직은 설계부터 잘못되었으므로 폐기한다. 아래는 실패한 코드이다 .. 2022. 6. 16.