전체 글

중요한 것은 꺾여도 그냥 하는 마음
※GET / POST 방식을 구분하지 않고 코드를 작성할 때 발생하는 에러 위 list 목록 페이지에서 reg라는 글쓰기 페이지를 호출하려고 한다. reg라는 글쓰기 페이지는 아래 코드와 같이 files라는 객체를 사용한다. 그런데 페이지 호출시 files와 관련해 받은 내용이 없어 해당 객체는 null 값이 되고, 이로 인해 목록에서 글쓰기 페이지를 호출하면 500 오류가 발생한다. 1) reg 페이지 관련 Controller @RequestMapping("reg") @ResponseBody public String reg(MultipartFile[] files, HttpServletRequest request) throws IllegalStateException, IOException { for(Mu..
※ 파일 전송에서의 기본 인코딩 방식 서버와 클라이언트는 기본 인코딩 방식으로 application/x-www-form-urlencoded 을 사용한다. 이는 문자열만을 주고받는 방식으로 위 이미지에서 처럼 클라이언트가 uid를 newlec, name을 dragon으로 서버로 전송할 경우 uid=newlec&name=dragon로 문자열을 전송한다. 하지만 파일과 같은 바이너리 파일들은 이런 문자열 형태로는 전송하기가 어려운데, 이를 극복하기 위해 나온 것이 multipart/form-data 인코딩 방식이다. 위 이미지처럼 하나의 문자열이 아닌 각 name마다 데이터별 별개의 구분을 주어 전송한다. 따라서 우리가 서버를 작성할 때, 파일을 받기 위해서는 multipart/form-data 인코딩 방식의..
https://www.acmicpc.net/problem/1052 1052번: 물병 지민이는 N개의 물병을 가지고 있다. 각 물병에는 물을 무한대로 부을 수 있다. 처음에 모든 물병에는 물이 1리터씩 들어있다. 지민이는 이 물병을 또 다른 장소로 옮기려고 한다. 지민이는 한 번 www.acmicpc.net 사용한 알고리즘 : 비트마스킹 풀이 전략 : 입력한 숫자를 2진수로 생각하고, 해당 2진수 안에 있는 1의 개수가 K개 이하가 될 때까지 1씩 더한다. (비트 1의 개수가 곧 물병의 개수를 의미하기 때문이다.) ex ) 000000001 = 1L 물병 1개 => 총 물병의 개수 : 1 000000010 = 2L 물병 1개 => 총 물병의 개수 : 1 000001010 = 8L 물병 1개, 2L 물병 1..
https://www.acmicpc.net/problem/15787 15787번: 기차가 어둠을 헤치고 은하수를 입력의 첫째 줄에 기차의 수 N(1 ≤ N ≤ 100000)과 명령의 수 M(1 ≤ M ≤ 100000)가 주어진다. 이후 두 번째 줄부터 M+1번째 줄까지 각 줄에 명령이 주어진다. www.acmicpc.net 사용한 알고리즘 : 비트마스킹 풀이 전략 : 기본값을 2^20으로 두고 비트마스크를 통해 승객을 태우거나 하차시킨다. default=Math.pow(2,20) 최초 기차의 상태는 00000 00000 00000 00000 이다. 여기서 비트 마스킹에 사용할 값인 default를 1 00000 00000 00000 00000 로 두고 아래 명령에 따라 변화하는 기차 상태값을 살펴보자. ..
https://www.acmicpc.net/problem/17419 17419번: 비트가 넘쳐흘러 🎶 DJ욱제는 비트에 몸을 맡기는 중이다. 🎶 DJ욱제는 비트에 심취한 나머지, 비트를 비틀어 제껴버리는 문제를 내 버렸다! N자리 이진수 K가 주어진다. K가 0이 아닐 때까지 아래의 연산을 적용 www.acmicpc.net import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String args[]) throws IOException{ BufferedRe..
@RestController("apiNoticeController") @RequestMapping("/api/notice/") public class NoticeController { @Autowired private NoticeService service; @RequestMapping("list") public List list() throws ClassNotFoundException, SQLException { List list = service.getList(1, "TITLE", ""); return list; } } 위와 같이 리스트를 반환시켜 해당 객체를 JSON 형식으로 클라이언트에 넘기려 했으나 org.springframework.http.converter.HttpMessageNotWrita..
https://www.acmicpc.net/problem/16922 16922번: 로마 숫자 만들기 2, 6, 10, 11, 15, 20, 51, 55, 60, 100을 만들 수 있다. www.acmicpc.net import sys input=sys.stdin.readline n=int(input()) result=[0]*(50*20+1) #50이 20번 쓰여 더해진게 최대값이므로 RomaNum=[1,5,10,50] buf=[] cnt=0 def recur(x,start): if x==n: result[sum(buf)]=1 return for i in range(start,4): buf.append(RomaNum[i]) recur(x+1,i) buf.pop() recur(0,0) print(sum(re..
기존 페이지에서는 header, body, aside, footer 등의 다양한 파트들이 하나의 페이지에 작성되어 있었다. 하지만 여러 페이지에서 공통으로 쓰이는 부품들이 있을 때, 특정 내용을 수정하려면 모든 페이지의 같은 내용을 수정해야한다. 또한 재사용에도 번거롭다는 단점이 있다. 이를 해결하기 위해 나온 것이 지금 배울 Tiles 라이브러리로 header, body, aside, footer 등의 여러 부품들을 하나의 레이아웃 페이지에 붙여 공통된 형태를 하나의 페이지로 가질 수 있게 할 것이다. 현재는 Front-end에서 이 기법을 제공하기에 점점 사용이 줄어가고 있으나, 여전히 사용하는 곳이 있으니 알고있자. 아래 설명할 내용들은 위 과정을 거친다. 1) 클라이언트가 서버에 /notice/l..
https://www.acmicpc.net/problem/15651 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net import sys input=sys.stdin.readline N,M=map(int,input().split()) visited=[False]*(N+1) result=[] def back_Tracking(x): if x==M: print(' '.join(map(str,result))) return for i in range(1,N+1): result.append(i) back_Tracking(..
https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net import sys input = sys.stdin.readline N,M=map(int,input().split()) visited=[False]*(N+1) result=[] def recur(x): if x==M: print(' '.join(map(str,result))) return for i in range(1,N+1): if visited[i]==False and (len(result)..
째로스
개발일지