본문 바로가기

IT/알고리즘

기초 알고리즘3(October 31 2019)

반응형

말은 기초이지만 확실히 실력이 없으니까 조금 헛고생 좀 했는데 그래도 생각한 만큼 새로운 것도 배우고 풀어나가니까 재밌네요 

시작

 

1. palindrome

02320 이렇게 첫 번째 숫자와 마지막 숫자 그리고 2번째 4번째 숫자가 똑같으면 palindrome여서 값은 true를 출력를 하는 알고리즘이다. 

10번째 줄부터 16번째는 제가 처음에 짝 코드인데 if else문을 사용해서 값이 정상적으로 나오는 것 같지만 문제는 만약 처음 돌 때는 false이지만 만약 마지막에만 값이 똑같으면 true로 변환하는데.. 그렇게까지 생각을 못 해서 20~28번 코드가 알고리즘에 적합한 코드이다. 한 번이라도 안 똑같으면 false로 값이 변하는 방식. 

또 charAt은 배열방처럼 0부터 시작을 한다!

 

 

2. 문자열 뒤집기

 

9~11번이 제 코드인데 값이 똑같이 출력이 됩니다. 근데 효율상 20~24가 더 빠르게 출력될 것 같네요.

1. 포문에서 str의 끝자리부터 backwards에 하나씩 추가해줍니다

2. 17번에서는 다른 방식으로 str를 charArray로 저장을 해줍니다. 

3. 포문 안에서는 c char의 길이의 반까지 돌리고, 첫 번째 마지막 바꾸고, 두 번째 그리고 마지막 - i 바꿔줍니다

4. 맨 마지막에 출력할 때 다시 String으로 변환

 

 

3. 중복된 수 제거하고 출력

1. 21~23은 arr[]의 inArr[i] 면 true로 변환해주기

2. 24~26은 잘 됐는지 빨간 글로 출력

3. 마지막 포문에서 이프문을 통해 arr[j]이 트루이면 숫자 출력하기

 

 

4. 평균을 구하고 평균넘는 학생 비율 구하기

1. 학생 수를 studentNum에 입력받고 studentGrade[] 배열 크기로 선언해주기

2. 학생 수만큼 점수 입력받기

3. 16~19포문에서 입력받으면서 sum에 총점 저장하기

4. avg에서 평균 받고 cnt를 통해 점수가 avg보다 높으면 cnt ++

5. cnt를 출력해주면서 비율 계산은 cnt/studentNum해주는데 둘 다 int형이여서 하나를 무조건 double형으로 형변환해주고 * 100하면 끝

 

 

6. 더하기 싸이클(1시간 이상 걸렸습니다..)

 

26을 입력 받았다고 가정을 하겠습니다

26시작해서 2 + 6 = 8 --> 68  6 + 8 = 14 -->  84 8 + 4 = 12 --> 42 4 + 2 = 6 --> 26 끝 4회전을 실시해서 출력은 4

 

1. 26의 일자리를 a에 number % 10 해서 저장(number에 입력받은 수를 저장합니다)

2. 26의 십자리를 b에 number/10를 해서 저장(int 형이여서 2.6의 .6은 버림)

3. result값을 0를 주고 while문을 실행하는데 조건은 result가 number랑 같을 때까지 실해

4. c에 a + b를 저장합니다. 처음엔 8

5.  result에 68이 나오기 위해서 a * 10 + c를 해주면 만약 c가 두 자릿수가 돼버리면 값이 이상하게 나옵니다. 그래서 저는 if문을 사용했는데 오늘 또 배운게 8 % 10을 하면 저는 0이 나올 줄 알았는데 당연히 8이 나옵니다. 왜냐면 10이 8로 나눌 수 없고 나머지는 자연스럽게 8이 되니까요. ㅎㅎㅎ 그래서 % 10을 추가하면 이프문을 사용 안해도 됩니다.

6. a 와 b값을 다시 지정해주고 cnt++올려주고 cnt출력 

 

지금 보면 다 간단한 알고리즘인데 기초가 없으니 하나 푸는데 시간도 오래 걸리고.. 그래도 매일 새로운 걸 배우니까 조금씩 성장하는거 같네요. 내일 약속 있어서 아침에 최대한 해보겠습니다 

반응형