본문 바로가기

코딩테스트166

[ 파이썬(python) ] 이중 반복문에서 print의 위치 별 출력 📍 이중 반복문에서 print의 위치 별 출력 n*n행렬 문제를 풀 때마다 print를 어디에다 써야 할지 헷갈려서 참고하기 위한 글이다. 다음은 (0,0)부터 1씩 증가하는 n*n 배열에서 arr[i][j]가 10보다 클 경우 cnt가 증가하는 코드이다. 1번 위치: number가 10보다 큰 조건일 때만 cnt 출력 2번위치: 조건에 상관없이 모든 좌표에서 cnt 출력 3번위치: j번은 다 돌고 i번째 돌 때 출력 즉, 행을 돌 때 출력한다. 주의할 점은 누적된 값을 출력한다. 4번위치: 모든 경우의 수를 다 돌고 나서 출력 ''' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ''' n, number, cnt = 4, 0, 0 arr = [[0] * n for _ in ran.. 2021. 5. 19.
[ 파이썬(python) ] 백준 1110 - 더하기 사이클 📍 백준 1110 - 더하기 사이클 백준 1110 - 더하기 사이클 ⚡️ 나의 풀이 문제의 조건대로 구현하면 되는 문제인데, n번 사이클을 돌고 나서 원래의 수와 같아지는 조건식을 잘못 넣어서 조금 헤맸다. 결론적으로 처음 입력을 새로운 변수 check로 선언하고 제일 마지막에 나온 값과 비교해주면 됐다. 또, 처음 조건에 주어진 수가 10보다 작으면 앞에 0을 붙인다고 나와있는데, 사실 이 조건은 없어도 되는 조건이다. 예를 들어 처음 주어진 수가 5라고 할 때, 앞에 0을 붙여주고 각 자리의 숫자를 더하면 0+5가 되는데, 0은 있으나 없으나 같은 값이 되기 때문이다. 따라서 해당 조건은 건너뛰고 생각하면 된다. 여담이지만 각 자리의 숫자를 더하는 방법은 다음과 같다. 재귀함수를 이용해서 10으로 나.. 2021. 5. 18.
[ 파이썬(python) ] 백준 7568 - 덩치 📍 백준 7568 - 덩치 백준 7568 - 덩치 ⚡️ 나의 풀이 언젠가 단계별 풀이에서 한번 봤었는데, 어떻게 풀어야 할지 몰라 넘겼었는데 이번엔 풀었다. 이 문제의 가장 핵심 문장은 각 사람의 덩치 등수는 자신보다 더 큰 덩치의 사람의 수로 정해진다.이다. 이중 반복문의 범위는 A-B, A-C, A-D, A-E / B-A, B-C, B-D, B-E / C-A, C-B, C-D, C-E / E-A, E-B, E-C, E-D 처럼 모든 경우의 수를 비교할 수 있게 선언해야 한다. A-B나 B-A나 같은거아닌가?! 라고 생각할 수도 있지만, 각각의 케이스에서 덩치 등수를 셀 때 나를 제외한 모든 사람의 덩치를 비교해야 하기 때문에 같지 않다. 자신을 포함한 모든 경우의 수를 조사한다.(반복문의 범위 설정의.. 2021. 5. 18.
[ 파이썬(python) ] 백준 4673 - 셀프 넘버 📍 백준 4673 - 셀프 넘버 백준 4673 - 셀프 넘버 ⚡️ 나의 풀이 문제는 대충 이해됐지만, 막상 코드로 표현하려니까 막막했다. 시작 범위를 어디서부터 잡아야 하는지도 잘 몰랐는데, 많은 고민 끝에 다음과 같은 방법을 생각했다. 생성자가 없는 숫자를 셀프 넘버라고 칭하니까 생성자가 있는 숫자들을 구하고 새로운 리스트에 담아주자. 전체 1 ~ 10000까지의 리스트를 초기화하고, 생성자가 있는 숫자들을 모두 빼면 나머지 값은 모두 셀프넘버가 된다. 문제에 10000보다 작거나 같은 셀프넘버라고 나와있으니까. 종료 범위는 10000이고, 시작 범위는 문제에 양의 정수 n에 대해 계산한다고 나와있으므로 1부터 시작한다. 또, 이와같이 생각했음에도 답이 도출되지 않았는데 원인은 target.append.. 2021. 5. 18.
[ 파이썬(python) ] 백준 1977 - 완전 제곱 수 📍 백준 1977 - 완전 제곱수 백준 1977 - 완전 제곱수 ⚡️ 나의 풀이 완전 제곱수를 만들 때는 root만 계산하면 되는 줄 알았는데, 반례가 있기 때문에 다시 제곱을 취해줘야 한다는 것을 처음 알았다. 그리고 root를 취할 때 math.sqrt 대신 i ** 0.5를 하면 간편하게 계산 할 수 있다. (이것도 처음 알았다.) 처음 수를 root를 취하자(i^0.5) (first = int(i \*\* 0.5)) first에 다시 거듭제곱(i^2)을 해준다. (second = first \*\* 2) while문을 사용하지 않아도 된다. 만약, append값이 없으면 ( num == [] )과 같이 사용한다. m = int(input()) n = int(input()) num = [] for .. 2021. 5. 17.