본문 바로가기

개발 노트/백준, 프로그래머스 풀이165

백준 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.
stack, queue 사용 시 size()를 꼭 써줘야한다 stack 이 비었을 시 top, bottom은 -1이고, pop의 경우는 사용을 못하므로 항상 stack을 사용할때에는 스택이름.size() 를 통해서 스택의 크기를 확인 후 참조하도록 한다 따라서, 조건문 등에서 stack의 사이즈를 모르는데 bottom, top이나 pop 등을 사용하면 안된다 꼭 다음과 같이 사이즈를 적어서 사용하자 if( 스택이름.size() && 조건1) // 스택의 사이즈가 0이하면 false이므로 스택이 비지 않았을떄만 구현하게 한다 같은 원리로 queue 도 사용 시 사이즈를 체크하고 사용해야만 한다 2022. 6. 16.
백준 1213/c++ )) 팰린드롬 만들기 아스키 코드 범위 이상(127개 이상)의 배열 cnt[200] 을 만들고 입력한 문자열 s를 돌며 각 문자를 반복자가 가리킬때마다 cnt[가리킨 문자의 아스키코드 넘버]의 값을 1씩 더해주어 s의 문자별 개수 데이터를 저장한다 알파벳 뒤부터 안으로 가야하므로 Z부터 A까지 하나씩 빼며 더하여 수행한다 홀수 개수를 갖는 문자가 하나면 mid 를 만들어주고 홀수 개수를 갖는 문자가 2개 이상이면 탈출한다 빈 결과문부터 시작해서 양옆에 문자를 하나씩 붙여서 만들어주고 홀수개수 문자가 딱 하나 있어서 mid 가 있다면 결과문 시작부터 결과문 길이 반만큼의 위치에 mid를 삽입한다 홀수 개수를 갖는 문자가 2개 이상이면 실패문구를 출력하고, 그 외에는 정상 결과문을 출력한다 어려웠던 점 아스키 코드 비교를 위해 .. 2022. 6. 15.
백준 9375/c++ )) 패션왕 신해빈 조합을 사용하여 입을 수 있는 의상의 경우의 수를 구하는 문제이다 의상 하나를 입력 시 의상의 이름 + " " + 의상의 종류 로 입력이 되기 때문에 공백을 전 후로 입력을 두번 받는셈이다 입력은 두개지만 의상의 이름은 필요없으므로 의상의 종류만으로 경우의 수에 고려한다 그 의상을 착용하지 않은 경우도 그 의상의 종류 중 하나로 더하여 계산한다 map을 통해 의상의 종류를 key값으로, 종류별 개수를 value값으로 저장하고 종류별 착용가능 개수를 모두 곱해서 (가지고 있는 종류+1미착용) 경우의 수를 구한다 그 중 모든 종류를 미착용한 알몸상태는 제외하니 -1 을 하여 최종 경우의 수를 구한다 그것을 테스트 케이스만큼 반복하는 문제이다 주의사항 map을 대입시 auto 자료형을 사용해야 된다 종류개수에.. 2022. 6. 15.