분류 전체보기 290

#1063 : 킹

풀이방법 사용된 것: 시뮬레이션 Queue 2022.11.14 문제에서 말해주는 상황을 그대로 시뮬레이션하기만 하면 되는 단순한 문제이다. 최대 움직임 수가 50번밖에 안 되므로 시간초과 걱정이 없기 때문이다. 기본적인 풀이 과정은 다음과 같다. 1. 킹의 최초 위치와 돌의 최초 위치를 읽어온다. 2. 모든 움직임 명령을 읽어와 순서대로 큐에 저장해둔다. 3. 큐에 넣은 명령들을 다음과 같은 과정을 따라 수행한다. - 이번 명령에 따라 킹을 이동하였을 때에 킹이 판 밖으로 나가는지 판별한다. 만약 킹이 나가게 된다면 아무것도 옮기지 않고 이번 명령을 종료한다. - 킹이 판 밖으로 나가지 않는다면, 킹이 옮겨갈 위치에 돌이 있는지 판별한다. 만약 그 위치에 돌이 없다면 킹만 옮기고 이번 명령을 종료한다. ..

오답노트 #7983 : 내일 할거야

풀이방법 및 문제점 2022.11.09 어이 없는 이유로 계속 실패하다가 오늘 해결에 성공한 문제이다. 이 문제를 풀 수 있는 완벽한 로직은 9달 전부터 알고 있었다. 그러나 그 때에는 Comparator를 아직 알지 못해, 매우 비효율적인 방식으로 값들을 정렬하였다. 그래서 시간초과를 받았다. 그리고 오늘 다시 도전하였다. 오늘은 Comparator를 아는 상태이기 때문에 시간초과는 받지 않았다. 그러나 for문에 break를 넣어서 틀렸다. 넣을 이유가 없는데 왜 넣었는지 모르겠다. 정말 멍청한 실수였다! break를 지우니 정답 처리가 되었다. 정답 게시글 바로가기 코드 Java(2022.01.22) 시간초과를 받은 코드 import java.util.Scanner; import java.util...

#7983 : 내일 할거야

풀이방법 사용된 것: 정렬 그리디 Comparator 2022.11.09 오답노트 #7983 : 내일 할거야 풀이방법 및 문제점 2022.11.09 어이 없는 이유로 계속 실패하다가 오늘 해결에 성공한 문제이다. 이 문제를 풀 수 있는 완벽한 로직은 9달 전부터 알고 있었다. 그러나 그 때에는 Comparator를 아직 알 blowupmomo.tistory.com 과제들을 마감일자가 가장 늦은 순으로 정렬한다. (가장 마감이 늦은 과제가 가장 앞에 오도록) 정답 값을 저장할 int 형 변수 ans를 선언하고, Integer.MAX_VALUE로 초기화한다. 그 후, 정렬되어있는 과제들을 앞에서부터 방문하며 아래를 반복한다. 이번 과제의 마감일자가 ans 값보다 큰 경우: ans = ans - (이번 과제를..

#5545 : 최고의 피자

풀이방법 사용된 것: TreeSet 정렬 그리디 2022.11.09 이 문제의 경우, 모든 경우의 수에 대하여 1원당 열량을 구하는 것이 매우 쉽다. 그 이유는 다음과 같다. 토핑의 종류가 최대 100가지밖에 안 된다. 동일한 토핑을 여러 번 올리는 경우가 없다. 토핑의 가격이 모두 같으므로, 열량이 더 높은 토핑을 올리지 않은 채 열량이 더 낮은 토핑을 올린다면 무조건! 손해이다. 그러므로 가장 열량이 높은 토핑부터 골라잡는 게 무조건 이득이다. 따라서 모든 경우의 수에 대한 1원당 열량 값을 싹 다 구하고, 그 중 가장 큰 것을 출력하면 된다. 방법은 다음과 같다. 먼저 토핑의 값을 모두 읽어온 뒤 오름차순 또는 내림차순으로 정렬해놓는다. 아무 토핑도 올리지 않았을 경우의 1원당 열량을 계산하여 그 ..

9. 삭제

삭제 기능을 구현하는 강의이다. read 페이지에서 삭제 버튼을 누르면 해당 페이지에서 보고 있던 데이터가 데이터베이스에서 삭제되고 사용자는 메인 화면으로 이동한다. 강의를 참고하여 아래와 같이 코드를 작성했다. from flask import Flask, request, redirect app = Flask(__name__) # 새 데이터가 추가될 때 사용될 아이디를 저장하는 전역변수 nextId = 4 # 데이터베이스 역할을 할 리스트 topics = [ {'id': 1, 'title': 'A', 'content': 'This is page A.'}, {'id': 2, 'title': 'B', 'content': 'This is page B.'}, {'id': 3, 'title': 'C', 'cont..

8. 수정

기존의 데이터를 수정하는 기능을 추가하는 회차이다. 강의 내용을 참고하여, 아래의 코드를 작성하였다. from flask import Flask, request, redirect app = Flask(__name__) # 새 데이터가 추가될 때 사용될 아이디를 저장하는 전역변수 nextId = 4 # 데이터베이스 역할을 할 리스트 topics = [ {'id': 1, 'title': 'A', 'content': 'This is page A.'}, {'id': 2, 'title': 'B', 'content': 'This is page B.'}, {'id': 3, 'title': 'C', 'content': 'This is page C.'} ] # 중복되는 부분을 함수화함 def template(conten..

7. 쓰기

7.1 회차에서는 웹에서 주고받는 요청의 종류, 그 중에서도 주로 GET과 POST에 대해 설명해주신다. 예전에 공부했던 내용을 되짚어볼 수 있어 좋았다. 7.2 회차에서는 GET만 다루었던 지금까지의 실습과 다르게 코드에 POST를 적용하여, 우리 웹사이트에 접속한 사용자가 데이터베이스에 데이터를 등록할 수 있게 만든다. 노트정리에 적을 만 한 내용이 딱히 없다. 7.2 회차에서 코드를 짜며 알게 된 꿀팁들만 기억하면 될 것 같다. 세 가지가 있었다. 새로 추가되는 데이터의 id를 전역변수를 통해 관리할 수 있음. 변수의 값을 이어붙여 url 문자열을 만들 때에는 변수를 문자열로 변환시키는 것을 잊지 말 것. @app.route() 에서 methods를 지정해주지 않으면 기본적으로 GET만 받도록 설정..

6. 읽기

6회차 강의에서 해야 할 내용을 5회차 강의 때 앞질러 해버렸다... 머쓱하군. 그래서 이번 회차에서는 5회차 때 완성했던 코드를 강사님의 코드와 유사하게 수정해보았다. 내가 5회차 때 썼던 코드와 강사님이 이번 강의에서 쓴 코드의 주된 차이점은 다음과 같다. 리스트의 조회 방법: 나는 인덱스로, 강사님은 for문과 if문으로 조회함. 네비게이터가 모든 화면에 표시됨: 나는 read 화면들에 간단한 문자열 하나만 표시되게 하였지만, 강사님은 메인 화면에 표시되었던 네비게이터가 모든 read 화면의 상단에 표시되게 함. 리턴값의 차이: 나는 화면 표시 함수가 단순한 문자열을 리턴하게 만들었지만, 강사님은 html 코드를 리턴함. 형 변환의 시점: URL에서 받아오는 id는 기본적으로 문자열임. 나는 그 문..

5. 홈페이지 구현

간단한 홈페이지를 만들어보는 회차이다. 코드 강의에 나온 코드를 수정하여 완성한 코드는 아래와 같다. from flask import Flask app = Flask(__name__) topics = [ {'id': 1, 'title': 'A', 'content': 'This is page A.'}, {'id': 2, 'title': 'B', 'content': 'This is page B.'}, {'id': 3, 'title': 'C', 'content': 'This is page C.'} ] # 메인 페이지 @app.route('/') def index(): str= '' # html 코드를 담을 문자열 # for문을 사용하여 str의 내용을 만들기 for topic in topics: str = s..

4. 라우팅

아래와 같은 플라스크 코드가 있다. index() 라는 함수의 위에 @app.route() 라는 것이 붙어있다. 이놈의 역할은 무엇일까? 바로 라우팅이다. 코드를 실행시켰을 때 주어지는 이 URL의 뒤에다가 route()의 괄호 안에 있는 URL을 붙이면 바로 아래에 있는 함수가 실행되는 것이다. URL에서 가장 뒤에 붙은 / 문자는 생략 가능하기 때문에, @app.route('/')는 http://127.0.0.1:5000 에 들어갔을 때 실행될 함수를 지정, 즉 메인페이지의 내용을 결정한다. http://127.0.0.1:5000 에 들어가보자. index() 함수에 적힌 대로 Welcome이 표시된다. 이렇게 어떤 URL에 어떤 내용이 연결될지 정해주는 것이 라우팅이다. 강의 영상에서 보여준 다른 ..