목록전체 글 (135)
100세까지 코딩
문제 나의 생각 알파벳을 'a'-'z'까지 다 입력해서 list를 만들기는 번거롭다. ord()를 사용하여 'a' - 'z'를 숫자로 치환한다. 숫자로 치환한 것을 find() 함수를 위해 문자로 다시 치환한다. string.find() 내장함수를 사용하여 해당 문자를 찾으면 처음 등장 위치, 못 찾으면 -1을 출력한다. find() 내장함수에 대한 이해도를 보는 문제인 것 같다. 나의 풀이 s = input() for i in range(ord('a'), ord('z') + 1): print(s.find(chr(i)), end= " ") 참고 ord(문자) : 하나의 문자를 받아 해당 문자에 해당하는 유니코드 정수로 반환. chr(정수) : 하나의 정수를 받아 해당 정수에 해당하는 유니코드 문자로 반환..
문제 나의 생각 N이 1000까지 가면 입력되는 수가 많으니 sys.stdin.readline()을 사용하여 입력 속도 증가 시킨다. 평균이므로 list에 점수를 다 입력하고 합계를 구한다. 평균: 문제 요구조건에 따라 합계 / M * 100 / 원소의 개수 파이썬인 만큼 빌트인 함수를 써서 짧고 빠르게 구현한다. 나의 풀이 import sys N = int(input()) score_list = list(map(int, sys.stdin.readline().split())) sum = 0 for i in score_list: sum += i result = sum / max(score_list) * 100 / len(score_list) print(result) 새롭게 알게 된 풀이 import sys..
문제 나의 생각 투 포인터를 쓴다. 시작값인 i는 오른쪽으로 전진. 즉 i+=1 끝값인 j는 왼쪽으로 전진. 즉 j-=1 시작값이 끝값과 같거나 커지면 종료. 즉 끝값이 시작값보다 큰 경우까지만 반복. while j > i 나의 풀이 N, M = map(int, input().split()) number_list = [i for i in range(1, N + 1)] for _ in range(M): i, j = map(int, input().split()) while j > i: number_list[i - 1], number_list[j - 1] = number_list[j - 1], number_list[i - 1] i += 1 j -= 1 print(*number_list) 새롭게 배운 풀이 N,..
문제 나의 생각 서로 다른 값을 저장할 수 있게 중복을 삭제해 주는 set() 자료형을 사용한다. set의 add() 내장함수를 사용하여 set에 하나씩 요소를 추가해준다. len() 내장함수를 사용하여 set의 길이를 출력하면 서로 다른 나머지 개수 출력 가능. 나의 풀이 number_set = set() for i in range(10): number_set.add(int(input()) % 42) print(len(number_set)) 숏코딩 print(len(set([int(input()) % 42 for _ in range(10)]))) 참고 1. set 함수 수학에서의 집합과 비슷하다. 중복제거, 교집합, 합집합, 차집합과 같은 연산 가능하다. 순서가 없으며, 원소의 위치나 삽입 순서를 알지..
문제 나의 생각 list를 번호에 맞게 초기화한다. swap을 시킨다. 나의 풀이 N,M = map(int,input().split()) bucket_list = [i for i in range(1,N+1)] for _ in range(M): i,j = map(int,input().split()) temp = bucket_list[i-1] bucket_list[i-1] = bucket_list[j-1] bucket_list[j-1] = temp print(*bucket_list) 참고 1. 리스트 초기화 방법 - 리스트 컴프리헨션 (i를 활용하여 여러 방법 가능, if문도 사용 가능) bucket_list = [i for i in range(m)] - 언팩킹 (0~m-1까지 순서대로 저장) bucket_..