'알고리즘' 태그의 글 목록 (3 Page)
본문 바로가기

알고리즘42

백준 2750_수 정렬하기 [C++] 문제 풀이 이 문제는 입력받은 수를 단순히 정렬하는 문제이므로 sort 함수를 이용하면 손쉽게 해결할 수 있습니다. 그러나 처음에는 sort를 사용하여 접근할 생각을 못해 입력 받은 값에 대해 temp 값을 두고, 이중 for문을 이용하여 두 수를 비교 후 앞의 수가 뒤의 수보다 크기가 작을 경우 두 수의 위치를 바꾸는 방식으로 풀이를 진행하였습니다. 소스코드 1. 이중 for문 활용 #include using namespace std; int main(){ int n,temp=0; cin >> n; int arr[n]={0,}; for (int i = 0; i > arr[i]; } for (int i = 0; i < n; i++) { for (int j = i+1; j <.. 2022. 7. 13.
백준 1316_그룹 단어 체커 [C++] 문제 풀이 이 문제는 각 단어가 떨어져서 중복되지 않는 (즉 그룹을 지을 수 있는) 단어가 몇 개인지를 출력하는 문제입니다. 여기서 고려해야 할 사항은 두 가지가 존재합니다. 1. 한 단어 내에 중복되는 문자가 존재하는가? -> 존재하지 않을 경우 그룹 단어 2. 중복되는 문자가 있는 경우 해당 문자가 연속해서 나타나는가? -> 연속되지 않을경우 그룹단어가 아님. 이렇게 두가지 사항을 고려하면 됩니다. 따라서 이중 for문을 이용하여 입력받은 값의 각 배열 값을 비교하여, 배열의 n번째 값과 m번째 값이 같을 때 n이 m-1 또는 m+1이 아닐 경우 0을 반환, for문이 완료될때까지 이상이 없을 경우 1을 반환하여 cnt 값에 더해주어 cnt를 출력해주면 됩니다. 소스코드는 아래와 같습니다. 소스코드 .. 2022. 7. 12.
백준 2941_크로아티아 알파벳 [C++] 문제 풀이 이 문제도 다른 문자열 문제들과 같이 풀이가 어렵지 않은 문제였습니다. 먼저 문자열을 입력받아 저장할 char 배열을 선언해준뒤, 표를 참고하여 크로아티아 알파벳에 해당하는 수가 두 글자인 경우 i번째와 i+1 번째의 배열값을 확인 후 일치하면 카운트를 1 증가시키고, 세 글자인 경우 i, i+1, i+2 번째 수 까지 비교 후 모두 일치하면 카운트를 1증가 시켜주어 출력해주면 됩니다. 소스코드는 아래와 같습니다. 소스코드 #include #include using namespace std; int main(){ char alpha[101]; int cnt=0; cin >> alpha; for (int i = 0; i < strlen(alpha); i++) { if (alpha[i]=='c' .. 2022. 7. 11.
백준 5622_다이얼 [C++] 문제 풀이 이 문제는 전화를 걸기위해 다이얼을 돌릴 때마다 1초씩 더 걸린다는 말을 잘 이해하지 못해 풀이에 어려움이 있었던 문제입니다. 먼저 문제 해결을 위해 각 문자에 해당하는 숫자부터 정리하겠습니다. 1 : 2 : A~C 3 : D~F 4 : G~I 5 : J~L 6 : M~O 7 : P~S 8 : T~V 9 : W~Z 이것을 이용하여 입력받은 값에서 알파벳이 A~C 일경우 +3, D~F일 경우 +4..... 이런식으로 입력받은 배열의 크기만큼 반복문을 수행해주면 되는 비교적 어렵지 않은 문제였습니다. 소스코드는 아래와 같습니다. 소스코드 #include #include using namespace std; int main(){ char dial[16]; int cnt=0; cin >>dial; f.. 2022. 7. 10.
백준 2908_상수 [C++] 문제 풀이 이 문제는 두개의 수를 입력받아 두 수를 거꾸로 읽어 비교 후 더 큰 수를 출력하면 되는 문제입니다. 이 문제는 2가지 방법으로 풀이가 가능할 것 같습니다. 1. 입력받을 배열을 2개 생성 + 값을 거꾸로 저장할 새로운 배열 2개 생성 -> 새로운 배열의 값을 int형으로 바꾸어 비교 후 큰 값 출력 2. 세 자리 수이기 때문에 temp 변수를 하나 두어 배열의 0번째 값을 temp에 넣고 2번째 값을 0번째 값으로 , temp는 2번째 값으로 바꾸어 준 후 비교하여 더 큰 값 출력 저는 여기서 첫번째 방법으로 풀이를 진행하였습니다. 입력받을 배열 a와 b, 바뀐값을 넣을 배열 newa와 newb를 생성 후 for문을 이용하여 입력받은 값을 반대로 저장해 주고, atoi를 이용하여 newa와 .. 2022. 7. 9.
백준 1157_단어 공부 [C++] 문제 풀이 이 문제는 단어를 입력받고 그 중에서 가장 많이 사용된 알파벳을 출력하는 문제입니다. 만약 가장 많이 사용된 알파벳이 2개이상인 경우에는 ?를 출력하면 됩니다. 이 문제는 전에 풀었던 알파벳 찾기 문제를 참고하여 각 알파벳이 몇번 사용되었는지 확인하면 되는 비교적 쉬운 문제입니다. (물론 알파벳 찾기 문제를 풀었다는 전제입니다) https://liveloper-jay.tistory.com/118 백준 10809_알파벳찾기 [C++] 문제 풀이 이 문제는 입력받은 단어의 각 알파벳이 몇번째에서 나오는지를 a~z까지 출력해주는 문제입니다. 만약 해당 알파벳이 나왔다면 0번째부터 순서를 출력하면 되고, 알파벳이 나오지 않 liveloper-jay.tistory.com 그런데 이 문제에서는 대문자와 .. 2022. 7. 7.
백준 2675_문자열 반복 [C++] 문제 풀이 이 문제는 숫자를 입력받고 길이가 20을 넘지 않는 선에서 문자열을 입력받으면 입력받은 숫자만큼 각각의 문자를 반복해서 출력하는 문제입니다. 예를 들어 3과 BC를 입력받으면 BBBCCC와 같이 출력이 되게 만들어주면 됩니다. 해결을 위해서 각각의 문자를 반복할 회수 r을 입력받고, 20자를 넘지 않는 선에서 문자열을 입력받기 때문에 각각의 문자를 저장할 크기가 20인 배열 char arr[20]을 생성해주고 이중 for문을 이용해서 배열의 길이보다 작을때, arr[0] 부터 반복할 수만큼 출력해주면 됩니다. 소스코드는 아래와 같습니다. 소스코드 #include #include using namespace std; int main(){ int t,r; char s[20]; cin >> t; f.. 2022. 7. 5.
백준 10809_알파벳찾기 [C++] 문제 풀이 이 문제는 입력받은 단어의 각 알파벳이 몇번째에서 나오는지를 a~z까지 출력해주는 문제입니다. 만약 해당 알파벳이 나왔다면 0번째부터 순서를 출력하면 되고, 알파벳이 나오지 않았을 경우 -1을 출력해주면 됩니다. 먼저 알파벳 수만큼의 배열 alpha[26]과 입력할 수 있는 단어의 최대길이 arr[100]을 선언해 준 후에 arr[0]부터 alpha[0]~alpha[25]까지 비교 후 일치하는 알파벳이 있는 경우 배열의 순번을 알파벳에 해당하는 배열의 값으로 넣어주면 됩니다. 소스코드는 아래와 같습니다. 소스코드 #include #include using namespace std; int main(){ int alpha[26]; char input[100]; int value=0; for (i.. 2022. 7. 4.
백준 11720_숫자의 합 [C++] 문제 풀이 이 문제는 입력할 숫자의 자리수 N을 입력받고, N자리의 수를 공백없이 입력받아 각 자리의 수를 모두 더한 값을 출력하는 문제입니다. N 자리 수를 입력받아야 하기때문에 배열 arr[N] 으로 각 자리수를 입력 받아야하며, 숫자는 공백없이 입력받아야 하기 때문에 int 형의 배열이 아닌 char 형으로 하나의 숫자가 아닌 문자를 하나씩 입력받는다고 생각하면 쉽게 해결할 수 있습니다. 그 다음 입력받은 배열을 정수형으로 변환하는 과정이 필요합니다. 그래서 처음에는 입력받은 문자를 atoi, atoll등 숫자로 바꾸어 그 숫자를 한 자리씩 더하는 방식으로 진행하려 했으나, 수의 범위가 커지면 원하는 값이 출력되지 않는 상황이 발생하였습니다. 그것을 해결하기 위해 고민하던 중 이전에 풀었던 아스키코.. 2022. 7. 4.