회사에서 작성한 프로젝트를 집 맥에서 돌리려고 하니 아래와 같은 에러가 발생했다.

This version of the Android Support plugin for IntelliJ IDEA (or Android Studio) cannot open this project, please retry with version 2021.1.1 or newer.

 

안드로이드는 튜토리얼도 제대로 따라해본적이 없는 문외한이라 어찌 해줘야할지 막막하다 그냥 프로젝트 구성문제 이겠지 하고 

프로젝트 자체를 새로 생성해서 소스를 옴겨 돌리자 생각했다.

 

그러자 아래와 같은 에러가 났다.

 

Could not find method dependencyResolutionManagement()

 

...

 

프로젝트 생성 초기인데 이래도 되는건가

 

스택오버플로우에서는 아래와 같은 답벼이 있었다.

https://stackoverflow.com/questions/67009832/android-studio-arctic-fox-2020-3-1-canary-14-could-not-find-method-dependencyr

 

Android Studio Arctic Fox | 2020.3.1 Canary 14 Could not find method dependencyResolutionManagement() for arguments

I am trying to create a new project(Test8) on Android Studio Canary 14 using new project wizard with BasicActivity template but am running into build error. Here is the log of error Settings file '...

stackoverflow.com

 

전부 하나같이 gradle-wrapper.properties의 수정을 하고있어서 따라해줬더니

해당 파일의 distributionUrl  를

distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-rc-1-bin.zip

 

 

로 설정해줬다.

 

그랬더니 이젠 

> Failed to apply plugin 'com.android.internal.version-check'.
   > Minimum supported Gradle version is 7.0.2. Current version is 7.0-rc-1. 

라고 에러가 뜬다....

 

힘들다

 

gradle버전을 변경해주려고해도 버전명이 어떻게 되는지 모르니

결국 해당 사이트들어가서 목록을 확인후 아래와같이 변경해줬다.

https://services.gradle.org/distributions/

 

Gradle Distributions

 

services.gradle.org

참고로 7.0.2 버전이라고 적힌것들은 이것들이다

 gradle-7.0.2-wrapper.jar.sha256 14-May-2021 14:12 +0200 64.00B

 gradle-7.0.2-docs.zip 14-May-2021 14:12 +0200 36.71M

 gradle-7.0.2-docs.zip.sha256 14-May-2021 14:12 +0200 64.00B

 gradle-7.0.2-src.zip 14-May-2021 14:12 +0200 39.45M

 gradle-7.0.2-src.zip.sha256 14-May-2021 14:12 +0200 64.00B

 gradle-7.0.2-bin.zip 14-May-2021 14:12 +0200 106.87M

 gradle-7.0.2-bin.zip.sha256 14-May-2021 14:12 +0200 64.00B

 gradle-7.0.2-all.zip 14-May-2021 14:12 +0200 147.19M

 gradle-7.0.2-all.zip.sha256 14-May-2021 14:12 +0200 64.00B

 

 

distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip

 

좋았어 이제 에러가 안보인다!

 

빌드 클린을 하고 이제 작업을 시작해보려고한다.

 

라 했으나 클린을 누르니 아래와 같은 에러가 뜬다

 

Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.

 

그만하고 싶어진다

 

도대체 프로젝트가 막 생성되었는데 뭐이리 방해가 많은지

분명 이전까지만 해도 다른 프로젝트들은 잘 돌리면서 왜그런지 다 때려치고 도망가고싶어질때 일단 돈받고 일하는거니

java버전도 변경해주자

 

난 맥환경이다.

상단 메뉴의(Android Studio) -> Preferences -> Build, Execution, Deployment -> Build Tools -> Gradle

에서 Gradle JDK 버전을

11로 변경해줬다.

설치한 기억은 없으나 왠지 모르게 설치 되어있으니 

이제 빌드 클린을 해보면

 

와 돌아간다!

이제서야 코드를 옴겨서 돌려봐야겠다.

programmers.co.kr/learn/courses/30/lessons/42584

 

코딩테스트 연습 - 주식가격

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00

programmers.co.kr

이번 문제는 swift가 지원되지않는다. java로 적는다.

 

난 문제 자체가 어떤걸 물어보는지 이해가 잘안됐다.

 

문제에서 주어진 prices배열에서 

첫번째 인덱스를 가진 값이 다음 값을 비교하고 쭉 배열의 끝까지 비교했을때 비교하려는 대상값보다 작아지는 카운트를 구하는 문제이다.

막상 글로 쓰니 무슨 말을 하는지 잘모르겠다.

코드를 보면 이해가 갈것이다.

 

class Solution {
    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        for(int i = 0 ; i < prices.length ; i++) {
            int sec = 0;
            for(int k = (i + 1) ; k < prices.length ; k++ ){
                sec++;
                if (prices[i] > prices[k]) { break; }
            }
            answer[i] = sec;
        }
        return answer;
    }
}

 

이 문제때문에 자바용 ide를 어떻게 할까 고민하다 시간많이 갔다.

 

난 결국 visual code에다가 외부확장용 자바포맷을 설치해 작성했다.

 

이클립스를 할까 하다가 이미 깔아있는 xcode로 할까하고 열심히 뒤졌다가

한번 돌려봤다가 이건 java를 종종 사용하면 너무 귀찮아질거같다 포기했다.

https://www.welcomekakao.com/learn/courses/30/lessons/42889

 

코딩테스트 연습 - 실패율 | 프로그래머스

실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다. 이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를

www.welcomekakao.com

 

 

1번스테이지부터 최종 스테이지까지

실패한 사람을 카운트

 

1번 스테이지 = 1번 카운트 / 총인원

2번 스테이지 = 2번 카운트 / (총인원 - 1번 카운트)

를 반복해서 구하는것으로 최종 각 스테이지별 실패율을 구했습니다.

 

조금 고민한 부분이 실패율별 내림차순 정렬해서 출력하는건데

그냥 버블정렬을 사용했어요.

버블정렬만세.....

 

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
 
public class Solution {
	public int[] solution(int N, int[] stages) {
		int stagesCount = stages.length;
		ArrayList<Integer> copySta = new ArrayList<>();
		
		//fail 부분은 인덱스 1 부터 사용할래
		int[] failCount = new int[N+1];
		double[] failP = new double[N+1];
		
		
		
		for (int i = 0; i < failCount.length; i++) {
			failCount[i] = 0;
		}
		
		for (int i = 0; i < failP.length; i++) {
			failP[i] = 0.0;
		}
		
		for (Integer integer : stages) {
			copySta.add(integer);
		}
		
		
		for (int i = 1; i <= N; i++) {
			for (Integer integer : copySta) {
				if(integer == i) {
					failCount[i]++;
				}
			}
		}
		
		for (int i = 1; i < failCount.length; i++) {
			failP[i] = (double)failCount[i] / stagesCount;
			stagesCount -= failCount[i];
		}
		
		HashMap<Integer, Double> pair  = new HashMap<>();
		for (int i = 1; i <= N; i++) {
			pair.put(i, failP[i]);
		}
		
		int[] sortTemp = new int[pair.size() + 1]; 
		Iterator<Integer> keys = pair.keySet().iterator();
		int index = 1;
		while(keys.hasNext()){
			sortTemp[index] = keys.next();
			index++;
		}
		
//		for(int t: sortTemp) {
//			System.out.println("key:" + t + " value:" + pair.get(t));
//		}
		
		
		//keys = pair.keySet().iterator();
		for (int i = 1; i <= sortTemp.length; i++) {
			for(int j = 1 ; j <= sortTemp.length - i - 1 ; j++) {
				//System.out.println("j:" + j + " " + pair.get(sortTemp[j]) + " < " + "j+1:" + (j+1) + " " + pair.get(sortTemp[j+1]) + " = " + (pair.get(sortTemp[j]) <  pair.get(sortTemp[j+1])));
	            if(pair.get(sortTemp[j]) <  pair.get(sortTemp[j+1])) {
	                int temp = sortTemp[j+1];
	                sortTemp[j+1] = sortTemp[j];
	                sortTemp[j] = temp;
	            }
	        }
			
//			System.out.print("i:" + i + " 루프의 결과 = ");
//			for(int t: sortTemp) {
//				System.out.print(t + " ");
//			}
//			System.out.println();
		}
		int[] answer = new int[sortTemp.length - 1];
		
		for (int i = 1; i < sortTemp.length; i++) {
			answer[i - 1] = sortTemp[i];
		}
		
		return answer;
	}
}

저장이나 정렬부분은 더 깔끔히 하신분이 많으신듯하지만

역시 바로떠오르는건 이런것뿐이네요.

 

 

문제 자체는 들어오는 문자열의 파싱이나 검색을 할수 있는지 묻는 문제로 보인다.

입력형식은 고정되어있기에 split 을 통해 파싱해서 2개냐 3개냐로도 판단할수있고

처음에검색을통해 종류를 판별후 서브스트링으로 만들어 풀수도 있겠다 싶다.

 

아래 소스에서는 enum으로 종류를 넣고 HashMap을통해 닉네임을 덮어쓰기를 하도록했다

import java.util.ArrayList;
import java.util.HashMap;

public class Solution {
	enum recordType { Enter,Leave,Change,ERROR }
	
	public String[] solution(String[] record) {
		
		HashMap<String, String> usersMap = new HashMap<>();
		ArrayList<String> midResult = new ArrayList<>();
		
		String[] answer; // 뒤에서 초기화 해주자
		
		for(int i = 0 ; i < record.length ; i++) {
			//회원별 저장
			String msg = record[i];
			String[] sub = msg.split(" ");
			recordType type;
			
			if(sub.length >= 2) {
				String key = "";
				type = recordType.valueOf(sub[0]);
				key = sub[1];
				if(type != recordType.Leave && type != recordType.ERROR) {
					if(sub.length > 2) {
						String name = sub[2];
						usersMap.put(key, name);
					}
				}
				if(type != recordType.Change) {
					midResult.add(key + ";" + type.toString());
				}
			} else {
				System.out.println("ERROR msg parse");			
				return new String[] {};
			}
		}
		
		
		answer = new String[midResult.size()];
		
		for (int i = 0; i < midResult.size(); i++) {
			String mid = midResult.get(i);
			String[] sub = mid.split(";");
			String name = usersMap.get(sub[0]) != null ? usersMap.get(sub[0]) : "";
			recordType type = recordType.valueOf(sub[1]) != null ? recordType.valueOf(sub[1]): recordType.ERROR;
			
			answer[i] = name + "님이";
			
			switch (type) {
			case Enter:
				answer[i] += " 들어왔습니다.";
				break;
			case Leave:
				answer[i] += " 나갔습니다.";
				break;
			case Change:case ERROR:default:
				answer[i] += "";
				break;
			}
		}
		return answer;
	}
}

http://tech.kakao.com/2018/09/21/kakao-blind-recruitment-for2019-round-1/

 

2019 카카오 신입 공채 1차 코딩 테스트 문제 해설

작년에 이어 올해도 블라인드 전형으로 카카오 개발 신입 공채가 시작되었습니다! 그 첫 번째 관문으로 1차 온라인 코딩 테스트가 지난 9월 15일(토) 오후 2시부터 7시까지 5시간 동안 치러졌는데요. 지원자분들 만큼이나 준비위원들도 테스트가 문제없이, 공정하게 치러질 수 있도록 많은 준비를 했고 두근 거리는 마음으로 끝까지 온라인 테스트를 모니터링했답니다. 문제는 작년과 비슷하게 구현 문제 위주로 쉬운 난이도에서 어려운 난이도 순으로 풀 수 있도록 차례대

tech.kakao.com

 

+ Recent posts