31번문제
처음에는 2중 for문을 돌려서 n까지의 숫자들을 하나 하나 약수를 구한다음 약수의 개수가 2일때 answer를 1씩 증가시키는 쪽으로 짰는데 시간초과가 떠서 소수판별함수를 가져와서 소수가 맞으면 answer를 증가시키는 쪽으로 짰다. 최종코드는
32번문제
32번과 33번은 굉장히 헤멨다. 이때 당시 머리가 너무 아픈탓도 있었지만 처음에 갈피를 제대로 잡지 못한것도 큰것같다. 32번 시도해 보다가 33번 시도해 보다가 타이레놀 한알 먹고 좀 앉아있다가 그냥 코드 싹 다 지우고 처음부터 차근차근 한줄씩 써내려가서 돌려보니 통과되었다.
중간에 로직을 놓칠까봐 한줄한줄 주석으로 써가면서 값 찍어보고 다음코드짜고... 하는식으로 풀었다.
최종코드는
32 33번은 채점 눌러서 맞았을때 오래 헤메서 그런지 뭔가 개운한느낌이 확 들었다.
33번문제
구하는 값은 수업을 들을수있는 최대의 인원, 주어지는 값은 반의 총인원, 체육복을 잃어버린 인원, 빌려줄수 있는인원
총 인원에서 잃어버린 인원을 뺀 후에 체육복을 빌려주면 그 수만큼 더하는 식으로 처음에는 구해보았다.
for문으로 reserve를 돌면서 reserve의i 인덱스, i인덱스 -1,i인덱스 +1이 lost에 포함하면 answer값을 1 올리고
해당 lost값을 지워버리는 식으로 짰다.
하지만 처음 for문에 3가지의 if문을 넣었을때의 문제가,
lost[1,2,3] reserve[2,3,4] 이런식으로 주어졌을때 문제 대로라면 2,3번이 각자 자기옷을 입고 4번은 1번한테 빌려줄수가 없어야 하는데 한번에 3가지if문을 돌려버리면 각각 한사람한테 빌려주면서 엉키게 되는것이였다.
그래서 본인일 경우에만 따로 빼서 돌린 후 앞,뒷번호학생한테 빌려주게끔 if문을 밖으로 뺐다.
최종 코드는