개인활동/코테(56)
-
백준 2657번: 문자열 반복
t = int(input()) for i in range(t): r, s = map(str, input().split()) new_s = [s[i]*int(r) for i in range(len(s))] print(*new_s, sep='') 입력받은 수만큼 문자를 여러번 출력하는 문제 오랜만에 문제를 푸니 코드를 적당히 줄이는 것이 또 어려워졌다. 오늘도 숏코드 뜯어보기 for r,_,*s,_ in[*open(0)][1:]:print(''.join(c*int(r)for c in s)) 먼저 open에서 입력받은 것 중 처음에 횟수는 생략, 문자를 반복할 횟수를 받고 띄어쓰기는 따로 변수 설정을 하지 않고, 문자열을 입력받았다. 문자열도 for c in s를 해도 하나하나 꺼내볼 수 있군요 빈 문자열에 ..
2023.09.05 -
백준 11720번: 숫자의 합
n = int(input()); num = input(); sum = 0 for i in range(n): sum += int(num[i]) print(sum) 띄어쓰기 없이 입력된 값을 분리하여 하나하나 더해주는 것이 목표인 이 문제에서는 문자열 슬라이싱을 잘 이용하는지를 확인하는 문제라고 볼 수 있다. 나는 슬라이싱을 해서 하나하나 더해주는 방법을 이용했다. 그리고 숏코드를 보았는데 좀 충격적이였다 input() print(sum(map(int,input()))) map 함수를 이용해 입력받은 것이 알아서 분리가 되는 듯 하다. 이에 대해 자세히 설명해주실 수 있는 분 있으면 부탁드립니다. 대충 이해는 되지만 a little bit 뭔가 부연설명이 더 필요한데 어떻게 서치해야할지 모르겠다.. 그럼 이만
2023.09.03 -
백준 11654번: 아스키코드
print(ord(input())) 오늘 풀어본 문제 매우 간단한 문제였다 입력받은 문자를 아스키코드로 변환하기 숏코드도 다 똑같아서 패스
2023.09.03 -
백준 9086번: 문자열
n = int(input()) strings = [str(input()) for _ in range(n)] for i in range(n): print(strings[i][0],strings[i][-1], sep='') 방금 푼 문제는 문자열 슬라이싱 문제로 첫 문자와 끝 문자를 띄어쓰기 구분 없이 출력하는 것이 목적이다. 출력할 때 한번에 처리하려고 하니 계속 generator가 튀어나와 이 부분에 대해 좀 정리해보고, 숏코드를 뜯어보려고 한다. 먼저 내가 보았던 출력값은 다음과 같았다. 뒤에는 아무래도 메모리 주소인 것 같다. (일부러 다 0으로 바꿔놓았음) 일단 generator 객체의 경우에는 입력받은 값을 가지고 있다고 한다. 그리고 호출 시 이를 하나씩 불러오는 역할을 하며 값을 불러올 때 n..
2023.09.01 -
백준 2743번: 단어 길이 재기
print(len(input())) 입력받은 문자열의 길이를 반환해주는 len 함수를 이용하는 것이 주된 문제 해결 방식이였다 다른 숏코드들도 이런 형태이다보니 숏코드 분석은 패스
2023.08.27 -
백준 27866번: 문자와 문자열
s = input() i = int(input()) print(s[i-1]) 문자열 슬라이싱의 기본 문제 쉽게 풀었었다. 숏코드도 보았는데 이렇게도 풀 수 있다니 print(input()[int(input())-1]) 한줄로 파바박 신기하다. 한줄로 어떻게 나타내면 좋을지 고민했었는데, 이런 방법이 있었다.
2023.08.27 -
백준 1546번: 평균
주어진 점수에서 최대값을 이용해 점수를 조작하여 평균을 다시 구하는 문제이다. n = int(input()) s = list(map(int, input().split())) s_max = max(s) new_s = [] while s: i, *s = s new_s.append(i/s_max*100) print(sum(new_s)/n) 기존의 데이터를 삭제하지 않는 방향이 가장 좋은 우리로서는 새로운 리스트를 만들어서 변형한 데이터를 넣어주는 것이 가장 좋다. 코드가 좀 길긴 했지만 2트만에 통과 숏코드도 한번 보고 넘어가자. n,*l=map(int,open(0).read().split()) print(sum(l)*100/max(l)/n) 나도 첫줄처럼 input을 받고 싶지만.. 이상하게도 pycharm..
2023.08.25 -
백준 10811번: 바구니 뒤집기
n, m = map(int, input().split()) list = list(range(n+1)) for i in range(m): j, k = map(int, input().split()) list[j:k+1] = reversed(list[j:k+1]) print(*list[1:]) 이 문제의 키포인트 swap 어떻게 swap하는가가 중요한 것같다. 나는 reversed를 이용하였는데, reversed는 리스트의 순서를 뒤바꿔주는 함수이다. 다른사람의 숏코드를 확인해본 결과 N,M,*l=map(int,open(0).read().split()) *A,=range(N+1) while l:i,j,*l=l;A[i:j+1]=A[j:i-1:-1] print(*A[1:]) 이렇게 swap해주었다. 다들 비슷한 ..
2023.08.24 -
백준 3052번: 나머지
rest = {(int(input()) % 42) for _ in range(10)} print(len(rest)) 이 문제는 입력받은 수를 42로 나눈 나머지들의 개수를 출력하되 중복된 값은 빼고 개수를 출력해야 한다 중복된 값을 어떻게 빼줄까 고민하던 중 set 자료형을 사용하기로 결정 set 자료형은 중복된 값은 원소로 가지지 않는다. 집합의 특징! 그래서 이를 이용해 문제를 쉽게 풀어줄 수 있었다 그렇다면 숏코드는 어떤가 보자 print(len({int(i)%42for i in open(0)})) 같은 방식을 사용했다. 딱히 뜯어볼 것은 없을 것 같아 다른 숏코드를 찾아본다. 다 비슷하다. 이런. 오늘은 여기서 끝.
2023.08.23 -
백준 5597번: 과제 안 내신 분..?
student = list(range(1, 31)) l = [map(int, input()) for _ in range(28)] print(l) for i in l: student.remove(i); print(student.sort()) 예제로 코드를 돌리면 계속 이렇게 떠서 l의 원소들을 확인해보았었다. 입력받은 각 숫자들이 들어간 것이 아닌 map object로 구성이 되어있었다. 대괄호를 이용해서 그런가 싶어서 list()로 바꾸어봐도 똑같은 결과를 가져온다. 도대체 뭘까 라고 생각하던 중 힌트가 된 글이 하나가 있다. (참고 자료: https://velog.io/@jakob1/SW%EC%82%AC%EA%B4%80%ED%95%99%EA%B5%90-%EC%A0%95%EA%B8%80-%EA%B0%9C..
2023.08.23