본문 바로가기
PWA & FIDO 이번 WWDC 2022에서 웹 개발자들이 주목할만한 내용이 있어 간략하게 정리를 해보려 한다. PWA PWA란 Progressive Web Application으로 모바일 앱처럼 느껴지는 웹사이트를 의미한다. 앱을 만드는 방식 중 하나로 이해하면 된다. 네이티브 앱의 장점인 플랫폼 API를 사용할수 있다는 점과 웹앱의 장점인 높은 접근성을 모두 활용할 수 있는 방식이다. 네이티브 앱처럼 오프라인에서도 사용할 수 있고, 푸시 알림을 보낼 수도 있다. 웹사이트이기 때문에 앱스토어에 등록하기 위해 고생하지 않아도 된다. 이미 유튜브, Spotify, 트위터 등 많은 기업들이 PWA를 활용하고 있다. 이렇게 좋은 점이 많은 PWA를 안드로이드에서는 잘 작동하지만 iOS에서는 여러 제약 사항이 많다. 대표적으로,.. 2022. 6. 23.
뉴스 클러스터링 - 2018 KAKAO BLIND RECRUITMENT (Java, Level 2) 처음 풀이 1. 두 문자열을 소문자 (or 대문자)로 변환 2. 각 문자열을 두 글자씩 쪼갠 후 영문자 쌍일 때만 Map의 원소로 삽입 3. 두 맵을 비교하여 교집합 크기 / 합집합 크기를 구하여 자카드 유사도를 구한다. - 교집합의 크기 : 두 맵에서 같은 key끼리의 value 값의 최소값 - 합집합의 크기 : 두 맵의 value 값들의 총합 - 교집합의 크기 final int INTEGER = 65536; public int solution(String str1, String str2) { String newStr1 = str1.toLowerCase(); String newStr2 = str2.toLowerCase(); Map subStrMap1 = splitStr(newStr1); Map subS.. 2022. 6. 19.
[3차] 방금그곡 - 2018 KAKAO BLIND RECRUITMENT (Java, Level 2) 처음 풀이 멜로디 전처리 #이 붙은 음은 글자 수가 달라 처리가 어려우므로 소문자로 바꿔준다. publicString makeNewMelody(String melody) { return melody.replace("C#", "c") .replace("D#", "d") .replace("F#", "f") .replace("G#", "g") .replace("A#", "a"); }//makeNewMelody() end 연주 시간 구하기 public int getDuration(String startTime, String endTime) { StringTokenizer stForDuration = new StringTokenizer(startTime, ":"); int startTimeHour = Intege.. 2022. 6. 19.
현대오토에버 MES/인프라 코딩테스트 및 인성검사 후기 오전에 인성검사, 오후에 코딩테스트를 봤다. 인성검사 온라인 인성검사는 처음 봤다. 처음이라 약간 떨렸는데, 말 그대로 '인성'검사였다. 약간 MBTI 검사같았다. 최대한 솔직하게 답변하려고 했고, 나에 대해 한 번 더 생각할 수 있는 시간이었다. 문항 당 주어지는 시간이 짧기 때문에 처음 든 생각대로 답을 골라야했다. 코딩테스트 총 3문제, 180분이 주어졌다. 자체 플랫폼에서 진행해서 전날에 미리 들어가 봤음에도 불구하고, 처음에 적응하느라 힘들었다. 외부 IDE도 금지라서 메서드들 기억해내는 것도 쉽지 않았다. 앞으로 어떤 환경에서 진행될 지 모르기 때문에 외부 IDE에 의존하지 않고 로직짜는 연습도 해야겠다. 문제는 많이 어려운 수준은 아니었다. 어떤 특정 알고리즘을 사용하는 문제보다는 주어진 조.. 2022. 6. 18.
로봇 청소기 - 백준 14503 (Java) https://www.acmicpc.net/problem/14503 풀이 1. 현재 위치에서 왼쪽으로 90도씩 회전하면서 해당 방향으로 이동할 수 있다면 이동한다. 2. 이동한 위치에서 또 왼쪽으로 90도씩 회전하면서 해당 방향으로 이동할 수 있다면 이동한다. 3. 만일 모든 방향으로 이동할 수 없을 경우, 현재 위치에서 1칸 뒤 (현재 방향에서 반대 방향)가 빈 칸이면 (청소를 이미 했더라도) 현재 방향을 유지한 채 이동하고, 1칸 뒤가 벽이라면 작동을 멈춘다. 현재 위치에서 조건 따지고, 이동하고서도 똑같이 조건 따지고... 하는 과정이 계속 진행되는 형태라 재귀로 접근했다. 입력을 받고 여러 변수를 초기화하고 재귀 메서드를 처음 호출하는 main() static boolean[][] isVisite.. 2022. 6. 17.
웹 서버(Web Sever) / 웹 어플리케이션 서버 (Web Application Server, WAS) / CGI 웹 서버 Web Server HTTP를 기반으로 클라이언트와 request/response를 주고받는 서버 추가적인 소프트웨어 없이 웹 브라우저만으로 서비스 제공 1. 정적 데이터를 WAS를 거치지 않고 바로 제공 단순 html 문서, css, js, image, file 등등 2. 동적 데이터 요청을 WAS로 전달 만약, 클라이언트로부터 동적인 처리가 필요한 요청이 웹 서버로 왔다면 이를 WAS로 요청을 넘긴다. 이후, WAS가 처리한 결과를 받아 클라이언트에게 응답한다. 웹 어플리케이션 서버 Web Application Server(WAS) 웹 서버로부터 온 동적 요청을 처리해 이를 웹 서버로 보내는 서버 WAS가 웹 서버의 역할을 포함하기도 한다. 하지만 정적 데이터 요청을 처리하느라, 정작 어플리.. 2022. 6. 15.
2022 SK텔레콤 T-WorX for Developers 챌린지 테스트 후기 총 4문제, 180분 자료구조/알고리즘 문제가 출제되었다. 1번 문제 (10분) 문제에서 주어진 정렬 방식을 구현하는 문제였다. 설명이 상세하게 되어있었고, 구현하는 과정에서 구해야 하는 값이 복잡하지 않은 문제라서 쉽게 풀 수 있었다. 2번 문제 (45분) 역시 문제에서 주어진 대로 구현하는 문제였다. 문제만 읽어보면 복잡하지 않아 보였는데. 막상 구현하려고 보니 고려해야 할 조건이 여러 케이스가 있고 복잡했다. 그래서 구현하기 전에 수도 코드를 좀 더 철저하게 작성하려고 했다. 여러 고려해야 할 조건을 말로 풀어서 하나씩 정리했다. 일단 작성한 수도 코드를 바탕으로 하드 코딩을 해서 문제로 주어진 2가지 테스트 케이스는 통과했다. 여러 조건을 OR로 연결하면서 if문을 작성했더니 코드가 깔끔해 보이진.. 2022. 6. 12.
가르침 - 백준 1062 (Java) 풀이 일단 a, n, t, i, c 알파벳은 기본적으로 배워야한다. 각 단어에서 앞 "anta"와 뒤 "tica"를 뺀 가운데 부분에서 a, n, t, i, c를 제외한 문자가 있으면 이를 list에 따로 저장한다. 그리고 해당 list에서 알파벳을 하나씩 선택하면서, 현재까지 선택한 알파벳으로(a, n, t, i ,c 포함) 몇 개의 단어를 커버할 수 있는지 매번 체크한다. 총 배울 수 있는만큼 알파벳을 배운 상태면 백트래킹으로 이전 분기로 돌아가 list에 있는 다른 알파벳을 선택하면서 커버할 수 있는 단어의 최대 숫자를 갱신한다. 알파벳을 선택할 때에는 순서가 상관없고, 중복을 허용하지 않기 때문에 조합이다. public class Main { static int words, max, total =.. 2022. 6. 8.
암호코드 - 백준 2011 (Java) 나의 풀이 맨 처음엔 각 자릿수를 1자리 혹은 2자리로 나누는 전체 경우의 수를 구하면 된다고 생각해 DFS로 접근하려 했다. 하지만 주어진 암호의 자릿수가 최대 5000자리라 다른 방법을 고민해야했다. dp로 접근이 가능해보여 시도했다. 그리고 암호가 잘못된 경우가 어떨 때인지 생각해보니 '0'을 고려해줘야 했다. 0의 앞자리가 1 혹은 2가 아닐 경우 잘못된 암호 그 이유는 0은 10, 20일 때만 해석이 가능하기 때문이다. 이를 토대로 규칙을 찾아보면 다음과 같다. dp[n] = dp[n-1] (맨 마지막 숫자가 0이 아닐 때) + dp[n-2] (뒤 두 자리의 수가 10이상 26이하일 때) dp[n]은 n자리 암호 해독이 가능한 경우의 수 이를 토대로 코드를 작성하면 아래와 같다. public s.. 2022. 5. 31.
리모컨 - 백준 1107 (Java) https://www.acmicpc.net/problem/1107 전체 풀이 1. 시작점인 100에서부터 "+, -"만으로 target까지 이동하는 횟수를 구한다. 2. 2-1 사용할 수 있는 숫자가 없을 경우 1에서 구한 수를 출력하고 끝낸다. 2-2 사용할 수 있는 숫자로 이루어진 수 중 target과 가장 가까운 수를 구하고, 해당 수와 target까지의 거리와 해당 수의 자릿수를 더한다. 3. 1과 2-2에서 구한 수 중 최솟값을 출력한다. main() static ArrayList impossibleList = new ArrayList(); public static void main(String[] args) throws IOException { BufferedReader bf = new Buf.. 2022. 5. 31.