당연히 맞을거라고 생각하고고민없이 제출했는데 첫 시도에 오답이 나왔다.그것이 아래의 소스2회 시도에서 성공했다.그리고 이젠 알고리즘 공부를 명분으로 파이썬에 더 익숙해져야겠다고 다짐한다.
1회차 시도에서 틀렸다.그 코드는 아래와 같다그 후 아래와 같이 모형화시켜서 검토했다사분면 할당을 잘못했다는 사실을 파악하고수정해서 풀어냈다.반성 : 위의 조건문은 길고 비효율적이라고 판단했다, AND를 활용해서 짧게 해결할 수 있을 것이다.
저번 문제는 1회차 시도에서 오답을 제출하고나서야검토에 모델을 사용하고 논리적 오류를 발견했다.이번 문제에서는 문제를 풀기 전에 손으로 논리적인 모델을만들어놓고 그대로 코드로 구현해보았다.밑의 그림이 손으로 그려본 모델이다.이는 표준화된 수도코드나 트리가 아닙니다.아직
너무 간단한 문제이지만나중을 위해서라도, 선 모델링 후 구현 습관을 들이기 위해서아래와 같이라도 간단하게 논리모델을 그려보았다.
열어보며 단계별 풀어보기를 진행중이지만, 단계별로 올라가는 것은 그대로 진행하되 10단계의 '재귀'부터 따로 하나씩 손대보기로 생각했다. 알고리즘에 최소한이라도 근접한 문제로 뇌를 자극해놓고 싶다. 논리적 구조화 이번 문제도 먼저 논리적 구조를 만들어놓고 진행해보려고
구태여 설명할 필요가 없으므로 사진한장으로 대체합니다.
간단한 문제이다 테스트케이스 수를 입력받고, 그 수만큼 한줄마다 A,B를 개별로 입력받아 그 수의 합을 출력해주는 문제이다.나는 시행횟수 T를 inputT로 입력받았고A,B를 T수만큼 구성한 2차원 리스트를 미리 선언하여for문을 이용해 리스트를 순서대로 인덱싱하여 A
for문을 이용해 1~n(입력값) 까지의 합을 구현했다.range(n)은 0부터 n-1의 리스트를 생성하므로for문의 명령부에 i+1을 사용했다.
sys.stdin.readline()을 활용해 입력을 받아지난번 A+B문제를 그대로 풀어내는 문제이다.나는 input키워드에 sys.stdin.readline을 그대로 할당해input()으로 재활용하는 방식으로 사용했다.그 이외는 기존 A+B풀이에서 크게 변화된 부분은
직전에 배운 sys.stdin.readline()을곧바로 활용해볼 수 있었다.풀이에 대해서는 구태여 설명할 필요가 없다고 판단하여사진으로 대체한다.
이번엔 N~1까지 거꾸로 찍어보는 시간이다.inputV에 입력을 받고0~inputV까지 리스트를 도메인으로 순차반복하는 반복문을 range를 활용하여 만들어주고반복문의 명령부에 input - i를 출력하도록 만들어 순차적으로 5-0 5-1 5-2 5-3 5-4 5-5
테스트 횟수를 입력받고, 횟수만큼의 A,B를 한줄마다 입력받아, \*'CASE ---사전에 readline을 사용하도록 input 키워드를 설정한다.inputT에 테스트 횟수를 입력받는다.Tx2 의 2차원 리스트를 생성하여 T만큼의 A,B를 저장받도록 준비한다for문
이번 문제는 한줄마다 별(\*)을 한개부터 +1씩 입력되는 정수 n까지줄바꿈하며 출력하는 문제이다.for 반복문을 이용하여 순차적으로 증가시키는 패턴을 이용할 수 있느냐가 첫번째 핵심이고출력에서 줄바꿈을 제어할 수 있는지 묻는 것이 두번째 핵심이다.나는 star함수를
이번 문제는 '별 찍기 - 1' 와 유사하지만,별을 오른쪽 정렬로 출력할 것을 요구한다.문제의 핵심은 입력값 inputV-1 만큼의 공백을 별을 찍기 전 한줄로 출력해두는 것이다.공백 출력과 별 출력은 range list를 반대방향으로 참조해야 하므로,입력값을 달리하는
이번 문제는 N과 X를 먼저 입력받고, 이후 N 크기의 수열을 입력받은 후 이 수열 중 X보다 작은 수를 입력받은 순서로 출력하도록 요구한다.for문의 반복리스트로 입력받은 리스트를 그대로 활용하는 것이 핵심이다.수열을 저장받을 1차원 리스트를 생성했다.이 리스트에 한
지금까지와는 다르게, 테스트 횟수를 따로 정수로 입력받지 않고 마지막 줄에 '0 0'을 입력받으면 테스트케이스 A,B 입력을 종료하도록 문제는 요구한다.테스트횟수가 입력으로 주어지지 않기에 미리 반복횟수를 미리 정의해둘 수 없다.따라서 for이 아니라 while을
이번문제는 직전에 풀었던 'A+B - 5' 문제와 다르게,입력의 종료를 '0 0'과 같은 특정 입력값으로 신호하지 않는다.그렇다면 입력이 끝난 순간을 어떻게 판별해내야 하는가 고민해봐야한다.그렇다, 입력이 들어오지 않고 다른 상황이 발생했을때 break로 while문을
이번 문제는 입력값 N을 받아 소위 '플러스 사이클' 을 돌려 다시 N에 이르기까지 Cycle의 Length를 출력하는 문제이다.입력값 N에 26이 주어지고 N이 더하기 사이클을 돌아 다시 26에 이르기까지 거치게되는 예시를 모델화하여 그려보았다.이를 일반화 시킨 후,
해당 문제는 리스트 선언과 extend() 메소드를 사용해 쉽게 풀 수 있었다. 누구든 코드만 볼 줄 알면 원리는 충분히 이해할 수 있을 것이다.변수명 = \[] 를 이용해 1차원 리스트 선언extend 메소드와 map( int, input().split() ) 로 입
처음 문제를 봤을 땐, 최댓값의 위치를 판별해내야 하기 때문에,정렬 알고리즘과 유사한 방식을 적절히 사용해, 위치판별을 쉽게 최적화 시킬 수 있을거라 생각했는데입력값의 갯수를 먼저 입력받는 방식이 아닌 점을 확인하고내가 잠시 고민한 방식은 폐기하기로 했다. 그냥 빠르고
이번 문제는 자연수 세개를 입력받아 이를 곱한 결과값에서,0~9까지의 숫자가 몇번 나오는지 차례로 출력하는 문제이다.세 자연수의 곱을 한 자릿수로 분해하여 1차원 리스트에 순서대로 저장한다.0~9까지의 1차원 숫자 리스트를 만들어둔다.두 리스트를 2-Level의 Nes
백준 '단계별로 풀어보기 1~12' 를 진행하는 현재지금까지는 모든 문제의 풀이과정을 짧게나마 velog에 올려왔습니다.그 이유는 아래의 제 네이버 블로그 글에 담겨있습니다.조금 시간이 걸리더라도 풀이를 복기하며 논리적으로 재정리하는 습관을 기르기 위해서였습니다.그리고
1부터 10001 사이의 Self Number를 구하는 문제이다.Self Number란? d(n) 이라는 함수가 존재하고, 이 함수는 n + n의 각 자리수들을 총합하여 반환한다고 할 때, d(n)에 어떠한 값을 입력해도 output으로 그 수가 나올 수 없는, 즉 생
입력으로 자연수 N이 주어질 때, 1에서 N사이에 속한 한수의 개수를 출력하라고 요구한다.한수란? : 양의 정수 X의 각 자리가 등차수열인 수아래에 그려둔 e.g를 참고하면 바로 이해할 수 있다.핵심은 1에서 N까지 수가 차례로 주어졌을 때,수의 각 자리간의 순서대로
방법 1 총 출력될 원소의 개수는 97 ~ 122까지 26개이다. 따라서 2Level-Nested-Loop 의 바깥 Loop 값 i가 97~122 range로 a부터 z까지의 아스키코드값이 된다. 그리고 Loop j는 입력받은 문자열을 아스키코드로 변환저장한 리스트
코드가 너무 긴거보니 최적화는 한참 멀었다.그래도 일단 처음 생각한 풀이법을 막힘없이 구현해냈음에 기뻐하자 다소 허무할 수 있는게아래와 같이 일반적으로 더해서 출력해도 시간초과가 되지 않는다.그럼에도 어떻게 sum의 성능을 개선할 수 있을지 고민해봤다는 점에서의미가 있
열어보며 전전 문제로 설탕 배달 문제를 풀어서인지 이번 문제는 읽으면서 그리디 알고리즘임을 알 수 있었다. 지금껏 구현문제만 손대다가 드디어 알고리즘 초입으로 넘어가는 중인데 간단하게나마 알고리즘을 분류하기 시작했다는 점이 미약하지만 고무적이다.