목록코팅테스트/백준 문제 모음 (296)
For Programmer
https://swexpertacademy.com/main/solvingProblem/solvingProblem.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 이 문제는 SWEA1215와 유사한 문제이다.(https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14QpAaAAwCFAYi ) 단, 차이점은 가장 길이가 긴 회문을 찾는것이고 이를 찾기위해서는 뽑은 카드 개수가 1~100개일 때 모두를 검사해야 한다는 것이다. 그런데, 1~100 개를 모두 검사하면 실행시간이 어마할 것이다. 따라서 실행 시간을 줄이기위해 1..
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14QpAaAAwCFAYi SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 간단히 세로와 가로를 K개 뽑는 과정을 따로 구현해주면서 뽑은 K개가 회문인지 확인하는 식으로 구현했다. # 회문 판별 함수 def palindrome_cheking(new_array): global count start = 0 # 시작 인덱스 end = K - 1 # 끝 인덱스 ispalindrome = True # 회문판별여부 변수 while start 8: # 만약 K를 뽑을 수 없다면 bre..
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14jJh6ACYCFAYD SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 이 문제는 처음에 간단히 입력받은 단어의 인덱스를 그대로 새로운 리스트에 저장하여 오름차순으로 정렬한 후 그 인덱스에 맞는 글자들을 출력하려고 하였다. 그러나 더 시간효율적으로 좋은 풀이방법이 있었다. 그냥 입력받은 단어들의 개수를 리스트에 저장해놓고 그 단어들의 개수 만큼 차례대로 출력하는 방식이었다. 2가지 모두 올려놓겠다. 아래는 정렬해서 출력하는 1번째 방식이다. T = int(input()..
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWcPjEuKAFgDFAU4 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 이 문제도 간단한 구현 문제이다. 우선 3개 이상을 뽑을려면 반복문을 3번 돌리는 것보다 재귀로 구현하는 것이 나은데 여기서는 2개만 뽑기 때문에 이중반복문으로 구현할 수 있다. 우선 2개를 뽑은 후에 그 곱을 문자열로 바꾸어 각각의 자리수를 검사한다. 그 후 앞의 자리수가 뒤의 자리수보다 크다면 단조가 아닌 것으로 그것이 아니라면 단조로 하여 코드를 구현해준다. import sys sys.stdi..
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7GLXqKAWYDFAXB SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 위 문제는 규칙을 잘 살펴야 한다. 규칙을 보면 중간을 기준으로 첫번째 행 부터 ~ 중간까지는 해당 행의 인덱스 만큼 양옆으로 나가면서 더해준다. 다시 반대로 마지막 행 부터 ~ 중간 뒤까지는 (전체 길이 - 현재 행의 인덱스 + 1) 만큼 양옆으로 나가면서 더해준다. 여기서 중요한점은 해당 행의 중간 지점은 반드시 더해준다는 것이다. 이를 이용해 간단히 코드를 구현할 수 있다. # import s..
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PuPq6AaQDFAUq SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 이 문제 난이도가 d2라고 하는데 생각보다 생각하기 어렵다... d2맞나?.... 우선, 계속 생각하다가 도대체 어떻게 가로랑 세로를 한 반복문안에서 함께검사하지? 하다가 그냥 따로 검사했더니 맞았다. 우선 가로와 세로를 따로 검사하기 위해 입력받은 리스트를 임시 리스트 2개에 각각 복사 한다. 그 후 전체 인덱스를 돌면서 한 인덱스에서 가로로만(열방향) 쭉쭉 이동해면서 검은색 블럭을 만나면 멈춰준..
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWOUfCJ6qVMDFAWg SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 이 문제의 풀이법은 3가지가 있다. 첫번째는 이 문제가 요구하는 방식이다. 우선 내림차순으로 점수들을 정렬한다음 K개를 뽑으면 된다. 그러면 가장 큰 점수이다. 그러나 이러한 문제는 기본적으로 재귀로도 풀 수 있다. N개중 K를 뽑는 문제이기 때문이다. 하지만 위 문제에서 재귀로 풀면 시간초과가 발생한다. 또한 itertools.permutations 로도 풀 수 있다. 파이썬 조합라이브러리이다. ..
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pq-OKAVYDFAUq SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 이문제는 회전시킨 행렬들을 무지성 반복문을 돌아 구하 거나 혹은 zip함수를 쓰면 쉽게 구할 수 있다. 1. zip풀이 def solution(order, array): result = [] # 회전시킨 행렬들을 담을 리스트 temp_list_90 = list(map(list, zip(*array[::-1]))) result.append(temp_list_90) temp_list2_180 = lis..