15일차 - 문자열, 해시, 배열, 수학
1번) 영어가 싫어요
이번 문제는 문자열 numbers을 영어로 된 숫자들을 실제 숫자로 표시해야 합니다. onetwothree를 123처럼 변환을 해야 한다. 이번엔 무식하게 앞의 문자가 'z', 'o', 't', 'f', 's', 'e', 'n'으로 찾고, zero, one, two, three, four, five, six, seven, eight, nine을 찾습니다. 12번줄 for문에서 14번 if문은 'z', 22번은 'o', 30번은 't', 50번줄은 'f', 70번줄은 's', 90번줄은 'e', 그리고 98번줄은 'n'을 담당합니다. 여기서 'z', 'o', 'e', 'n'은 경우의 수가 1개라 간단합니다. startIdx을 현재 i로 설정하고 endIdx는 i에서 1개의 경우의 수 단어 길이를 더하면 됩니다. 이후 str에 그 단어의 실제 수를 더하고 for문 초기값인 i를 endIdx에 1을 더해주면 됩니다.
반대로 경우의 수가 1개 초과인 't', 'f', 's'은 다음 알파벳을 보고 경우의 수를 줄이면서 정합니다. 't'는 다음이 'w' 또는 'h', 'f'은 다음이 'o' 또는 'i', 's'는 'i' 또는 'e'입니다. 그냥 이번 문제는 노가다로 풀어서 매우 비효율적입니다. 이 문제의 다른 사람의 풀이를 보니 현타옵니다..
2번) 인덱스 바꾸기
이번 문제는 인덱스 바꾸기이며 평소에 정렬을 직접했으면 매우 쉽게 풀 수 있는 문제입니다.
3번) 한 번만 등장한 문자
이번 문제는 한 번만 등장한 영어 문자를 출력하면 됩니다. 일단 9번줄에 alphaCnt라는 배열을 만들어서 알파벳 크기로 초기값을 0으로 설정했습니다. 이후 13번줄 for문에서 주어진 s[i]값을 97만큼 빼서 alphaCnt의 인덱스 값으로 넣어서 1을 증가합니다. 여기서 97을 빼는 이유는 아스키 코드로 char을 int로 변환하기 위해서 97만큼 빼줍니다. 마무리로 20번줄 for문에서 alphabetCnt[i]의 값이 1인 경우 answer에 값을 더하면 됩니다. 여기서 int을 97로 더한 다음 char로 변환해줘야 합니다.
4번) 약수 구하기
이번 문제는 주어진 정수 n의 약수를 구하면 됩니다. 간단하게 %을 써서 0이 나온 경우에 answer에 값을 삽입하면 됩니다.
'알고리즘 공부 > 프로그래머스 알고리즘' 카테고리의 다른 글
코딩테스트 입문 - 17일차 (C++) (1) | 2024.02.13 |
---|---|
코딩테스트 입문 - 16일차 (C++) (1) | 2024.02.09 |
코딩테스트 입문 - 14일차 (C++) (1) | 2024.02.06 |
코딩테스트 입문 - 13일차 (C++) (0) | 2024.02.06 |
코딩테스트 입문 - 12일차 (C++) (1) | 2024.02.01 |